在沒有互斥體的情況下調用 pthread_cond_signal 會危及訊號嗎?
一些文獻表明,調用 pthread_cond_signal 需要事先鎖定互斥體,然後再解鎖。但是,您可以在不鎖定互斥鎖的情況下呼叫 pthread_cond_signal 或 pthread_cond_broadcast 嗎?
答案:
不可以,在不先鎖定互斥鎖的情況下呼叫 pthread_cond_signal 或 pthread_cond_broadcast 是不安全的。這是透過涉及兩個進程(A 和 B)的簡單範例來說明的。
進程A:
進程B(錯誤):
如果條件開始為FALSE而進程B 嘗試在沒有互斥鎖的情況下發出訊號,則它由於指令交錯,進程 A可能會錯過喚醒訊號。
進程 B(正確):
鎖定互斥鎖定進程 B 可以防止此問題,確保進程 A 接收到喚醒訊號。
注意:雖然技術上可以移動pthread_cond_signal() 在 pthread_mutex_unlock() 之後,不推薦,因為它會降低執行緒調度效率。
以上是在沒有互斥體的情況下呼叫「pthread_cond_signal」安全嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!