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);
Prozess B (falsch):
condition = TRUE; pthread_cond_signal(&cond);
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);
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!