Wat is Conditievariabele?

Synchronisatiemechanisme dat een thread laat slapen tot aan een voorwaarde is voldaan en door een melding van een andere thread wakker maakt. Na het wakker worden wordt de voorwaarde opnieuw gecontroleerd.

Japanse benaming: 条件変数

“Conditievariabele” komt voor in 1 oefenvragen uit 1 onderwerpen, bijv. Multicore en synchronisatie.

Vakgebied: Multicore en synchronisatie

Nu oefenen: vragen over Conditievariabele

Waarom wordt bij een conditievariabele, wanneer wordt gewacht tot de wachtrij niet meer leeg is, na het ontwaken de voorwaarde opnieuw gecontroleerd met een while-lus in plaats van een if-opdracht?

  1. AOmdat een while-lus sneller wordt uitgevoerd dan een if-opdracht
  2. BOmdat een conditievariabele volgens de regels niet met een if-opdracht kan worden gebruikt
  3. COmdat de thread ook na het wekken kan merken dat de voorwaarde niet vervuld is, doordat een andere thread eerder iets heeft weggehaald of de thread zonder reden is ontwaakt
Antwoord en toelichting tonen

Antwoord: C. Omdat de thread ook na het wekken kan merken dat de voorwaarde niet vervuld is, doordat een andere thread eerder iets heeft weggehaald of de thread zonder reden is ontwaakt

Wachten op een conditievariabele laat de lock los, slaapt en neemt na wakker worden door een melding de lock opnieuw voordat hij terugkeert. In de tussentijd kan een andere thread eerder de lock nemen en het element uit de wachtrij halen. Bovendien is toegestaan dat vanwege de implementatie zonder melding wordt ontwaakt (spurious wakeup). Daarom wordt na het ontwaken de voorwaarde gecontroleerd en wordt met een while-lus opnieuw gewacht als die niet is vervuld.

“Conditievariabele” in de toelichting

Vragen met “Conditievariabele” (1)

  1. Waarom wordt bij een conditievariabele, wanneer wordt gewacht tot de wachtrij niet meer leeg is, na het ontwaken de voorwaarde opnieuw gecontroleerd met een while-lus in plaats van een if-opdracht?

Verwante termen

Numerieke apertuur (NA) ABA-probleem Acquire-release Atomaire instructie Barrièresynchronisatie Compare-and-swap Data race Deadlock Directorygebaseerde coherentie (directory-based) False sharing

Naar de woordenlijst