Heim > Backend-Entwicklung > C++ > Ist der Aufruf von „pthread_cond_signal' ohne Mutex sicher?

Ist der Aufruf von „pthread_cond_signal' ohne Mutex sicher?

DDD
Freigeben: 2024-12-03 16:53:10
Original
513 Leute haben es durchsucht

Is Calling `pthread_cond_signal` Without a Mutex Safe?

Beeinträchtigt der Aufruf von pthread_cond_signal ohne Mutex die Signalisierung?

Einige Literatur legt nahe, dass der Aufruf von pthread_cond_signal den Mutex vorher sperren und anschließend entsperren muss. Können Sie jedoch pthread_cond_signal oder pthread_cond_broadcast aufrufen, ohne den Mutex zu sperren?

Antwort:

Nein, es ist unsicher, pthread_cond_signal oder pthread_cond_broadcast aufzurufen, ohne vorher den Mutex zu sperren. Dies wird anhand eines einfachen Beispiels veranschaulicht, das zwei Prozesse (A und B) umfasst.

Prozess A:

pthread_mutex_lock(&mutex);
while (condition == FALSE)
    pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);
Nach dem Login kopieren

Prozess B (falsch):

condition = TRUE;
pthread_cond_signal(&cond);
Nach dem Login kopieren

Wenn die Bedingung als FALSE beginnt und Prozess B versucht, ohne Mutex-Sperre zu signalisieren, ist es für Prozess A möglich, dies zu tun Verpassen Sie das Wecksignal aufgrund einer Verschachtelung von Anweisungen.

Prozess B (Richtig):

pthread_mutex_lock(&mutex);
condition = TRUE;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
Nach dem Login kopieren

Das Sperren des Mutex in Prozess B verhindert dieses Problem. Sicherstellen, dass Prozess A das Wecksignal empfängt.

Hinweis: Es ist zwar technisch möglich, pthread_cond_signal() danach zu verschieben pthread_mutex_unlock() wird nicht empfohlen, da es die Effizienz der Thread-Planung verringert.

Das obige ist der detaillierte Inhalt vonIst der Aufruf von „pthread_cond_signal' ohne Mutex sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage