Rumah >pembangunan bahagian belakang >C++ >Adakah Memanggil `pthread_cond_signal` Tanpa Mutex Selamat?

Adakah Memanggil `pthread_cond_signal` Tanpa Mutex Selamat?

DDD
DDDasal
2024-12-03 16:53:10529semak imbas

Is Calling `pthread_cond_signal` Without a Mutex Safe?

Adakah Memanggil pthread_cond_signal Tanpa Mutex Mengganggu Isyarat?

Sesetengah literatur mencadangkan bahawa memanggil pthread_cond_signal memerlukan mengunci mutex terlebih dahulu dan membuka kuncinya selepas itu. Walau bagaimanapun, bolehkah anda memanggil pthread_cond_signal atau pthread_cond_broadcast tanpa penguncian mutex?

Jawapan:

Tidak, adalah tidak selamat untuk memanggil pthread_cond_signal atau pthread_cond_broadcast terlebih dahulu. Ini digambarkan melalui contoh mudah yang melibatkan dua proses (A dan B).

Proses A:

pthread_mutex_lock(&mutex);
while (condition == FALSE)
    pthread_cond_wait(&cond, &mutex);
pthread_mutex_unlock(&mutex);

Proses B (Salah):

condition = TRUE;
pthread_cond_signal(&cond);

Jika keadaan bermula sebagai FALSE dan Proses B cuba memberi isyarat tanpa penguncian mutex, ia adalah mungkin untuk Proses A terlepas isyarat bangun kerana arahan terputus.

Proses B (Betul):

pthread_mutex_lock(&mutex);
condition = TRUE;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

Mengunci mutek dalam Proses B menghalang isu ini, memastikan Proses A menerima isyarat bangun.

Nota: Walaupun secara teknikal mungkin untuk bergerak pthread_cond_signal() selepas pthread_mutex_unlock(), ia tidak disyorkan kerana ia mengurangkan kecekapan penjadualan benang.

Atas ialah kandungan terperinci Adakah Memanggil `pthread_cond_signal` Tanpa Mutex Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn