Per què Pthread_cond_wait necessita un mutex?
Per què Pthread_cond_wait necessita un mutex?

Vídeo: Per què Pthread_cond_wait necessita un mutex?

Vídeo: Per què Pthread_cond_wait necessita un mutex?
Vídeo: Is it correct to call pthread_cond_wait() and pthread_cond_timedwait() on the same condvar by... 2024, De novembre
Anonim

El mutex s'utilitza per protegir la pròpia variable de condició. Per això tu necessitat es va tancar davant teu fer esperar. Aleshores, quan la variable de condició sigui senyalitzada o emesa a, es despertaran un o més dels fils de la llista d'espera i el mutex es tornarà a bloquejar màgicament per a aquest fil.

Pel que fa a això, Pthread_cond_wait desbloqueja mutex?

El pthread_cond_wait () bloqueja el fil de crida a la variable de condició cond, i desbloqueja l'associat mutex mutex . El fil de trucada s'ha d'haver bloquejat mutex abans d'esperar a la variable de condició. En tornar de la funció, el mutex torna a ser bloquejat i propietat del fil de trucada.

Posteriorment, la pregunta és, per què és necessari mutex? Assegura que només un fil executa una peça clau de codi alhora, cosa que al seu torn limita l'accés a una estructura de dades. Assegura que els dos fils tinguin una visió completa i adequada d'aquesta memòria independentment de qualsevol reordenació de la CPU. El mutex és una necessitat absoluta quan es fa programació concurrent.

A més a més, per què les variables de condició necessiten mutex?

El mutex és utilitzat per protegir el variable de condició mateix. Per això tu necessitat es va tancar davant teu fer esperar. Llavors quan el variable de condició és senyalitzat o emès a un o més dels fils de la llista d'espera voluntat ser despertat i el mutex farà tornaràs a bloquejar màgicament per a aquest fil.

Per què necessitem variables de condició?

Variables de condició deixar dormir un conjunt de fils fins que faci pessigolles! Podeu fer pessigolles a un fil o a tots els fils que estan dormint. Si només activeu un fil, el sistema operatiu decidirà quin fil activar.

Recomanat: