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

Adakah Memanggil `pthread_cond_signal` Tanpa Mutex Selamat?

DDD
Lepaskan: 2024-12-03 16:53:10
asal
563 orang telah melayarinya

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);
Salin selepas log masuk

Proses B (Salah):

condition = TRUE;
pthread_cond_signal(&cond);
Salin selepas log masuk

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);
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan