Pourquoi Pthread_cond_wait a-t-il besoin d'un mutex ?
Pourquoi Pthread_cond_wait a-t-il besoin d'un mutex ?

Vidéo: Pourquoi Pthread_cond_wait a-t-il besoin d'un mutex ?

Vidéo: Pourquoi Pthread_cond_wait a-t-il besoin d'un mutex ?
Vidéo: Chapitre 4 - Multithreading avec POSIX - partie 2/2 2024, Novembre
Anonim

Les mutex est utilisé pour protéger la variable de condition elle-même. C'est pourquoi vous avoir besoin il s'est verrouillé devant toi faire une attente. Ensuite, lorsque la variable de condition est signalée ou diffusée, un ou plusieurs threads de la liste d'attente seront réveillés et le mutex sera à nouveau verrouillé par magie pour ce fil.

À ce sujet, Pthread_cond_wait déverrouille-t-il le mutex ?

Les pthread_cond_wait () bloque le thread appelant sur la variable de condition cond, et déverrouille l'associé mutex mutex . Le thread appelant doit avoir verrouillé mutex avant d'attendre la variable de condition. Au retour de la fonction, le mutex est à nouveau verrouillé et détenu par le thread appelant.

Par la suite, la question est, pourquoi le mutex est-il nécessaire ? Il garantit qu'un seul thread exécute un élément de code clé à la fois, ce qui à son tour limite l'accès à une structure de données. Il garantit que les deux threads ont une vue complète et correcte de cette mémoire, indépendamment de toute réorganisation du processeur. Les mutex est une nécessité absolue lors de la programmation concurrente.

À côté de ci-dessus, pourquoi les variables de condition ont-elles besoin de mutex?

Les mutex est utilisé pour protéger le variable d'état lui-même. C'est pourquoi vous avoir besoin il s'est verrouillé devant toi faire une attente. Puis quand le la variable de condition est signalé ou diffusé à, un ou plusieurs des fils sur la liste d'attente volonté être réveillé et le mutex va être à nouveau verrouillé par magie pour ce fil.

Pourquoi avons-nous besoin de variables de condition ?

Variables de condition permettre à un ensemble de fils de dormir jusqu'à ce qu'ils soient chatouillés ! Vous pouvez chatouiller un fil ou tous les fils qui dorment. Si vous ne réveillez qu'un seul thread, le système d'exploitation décidera quel thread se réveiller.

Conseillé: