Maison > développement back-end > C++ > L'appel de « pthread_cond_signal » sans Mutex est-il sûr ?

L'appel de « pthread_cond_signal » sans Mutex est-il sûr ?

DDD
Libérer: 2024-12-03 16:53:10
original
508 Les gens l'ont consulté

Is Calling `pthread_cond_signal` Without a Mutex Safe?

L'appel de pthread_cond_signal sans signalisation de compromission du mutex ?

Certaines publications suggèrent que l'appel de pthread_cond_signal nécessite de verrouiller le mutex au préalable et de le déverrouiller par la suite. Cependant, pouvez-vous appeler pthread_cond_signal ou pthread_cond_broadcast sans verrouiller le mutex ?

Réponse :

Non, il est dangereux d'appeler pthread_cond_signal ou pthread_cond_broadcast sans d'abord verrouiller le mutex. Ceci est illustré à travers un exemple simple impliquant deux processus (A et B).

Processus A :

pthread_mutex_lock(&mutex);
while (condition == FALSE)
    pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);
Copier après la connexion

Processus B (Incorrect) :

condition = TRUE;
pthread_cond_signal(&cond);
Copier après la connexion

Si la condition démarre comme FALSE et que le processus B tente de signaler sans verrouillage mutex, il est possible que le processus A manque le signal de réveil dû à un entrelacement d'instructions.

Processus B (Correct) :

pthread_mutex_lock(&mutex);
condition = TRUE;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
Copier après la connexion

Le verrouillage du mutex dans le processus B évite ce problème, garantissant que le processus A reçoit le signal de réveil.

Remarque : Bien qu'il soit techniquement possible de déplacer pthread_cond_signal() après pthread_mutex_unlock(), cela n'est pas recommandé car cela réduit l'efficacité de la planification des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal