Waarom heeft Pthread_cond_wait een mutex nodig?
Waarom heeft Pthread_cond_wait een mutex nodig?

Video: Waarom heeft Pthread_cond_wait een mutex nodig?

Video: Waarom heeft Pthread_cond_wait een mutex nodig?
Video: Waarom Heeft Oranje Altijd Honger (Roblox) 2024, November
Anonim

De mutex wordt gebruikt om de voorwaardevariabele zelf te beschermen. Dat is waarom jij nodig hebben het vergrendeld voor je doen een wacht. Wanneer dan de conditievariabele wordt gesignaleerd of uitgezonden naar, zullen een of meer van de threads op de wachtlijst worden gewekt en de mutex wordt op magische wijze weer vergrendeld voor die thread.

Wat dit betreft, ontgrendelt Pthread_cond_wait mutex?

De pthread_cond_wait () functie blokkeert de aanroepende thread op de conditievariabele cond, en ontgrendelt De bijbehorende mutex mutex . De aanroepende thread moet vergrendeld zijn mutex voordat u wacht op de voorwaardevariabele. Bij terugkeer van de functie, de mutex is opnieuw vergrendeld en eigendom van de aanroepende thread.

Vervolgens is de vraag, waarom is mutex nodig? Het zorgt ervoor dat slechts één thread tegelijkertijd een belangrijk stuk code uitvoert, wat op zijn beurt de toegang tot een gegevensstructuur beperkt. Het zorgt ervoor dat beide threads een volledig en juist beeld van dat geheugen hebben, ongeacht eventuele herschikking van de CPU. De mutex is een absolute noodzaak bij gelijktijdig programmeren.

Naast het bovenstaande, waarom hebben conditievariabelen mutex nodig?

De mutex is gebruikt om de te beschermen conditie variabele zelf. Dat is waarom jij nodig hebben het vergrendeld voor je doen een wacht. Toen de voorwaarde variabele is gesignaleerd of uitgezonden naar een of meer van de threads op de wachtlijst zullen wakker worden en de mutex wil opnieuw magisch worden vergrendeld voor die draad.

Waarom hebben we conditievariabelen nodig?

Conditievariabelen laat een stel draden slapen tot ze gekieteld zijn! Je kunt één thread kietelen of alle threads die slapen. Als u slechts één thread activeert, beslist het besturingssysteem welke thread moet worden geactiveerd.

Aanbevolen: