[英]What happens if after calling pthread_cond_wait(), another thread acquires the mutex that was locked and then phread_cond_broadcast is called?
所以讓我們說在一個線程中,你調用pthread_cond_wait()
。 在調用之后,該線程的互斥鎖被解鎖,現在線程被鎖定在條件變量上。 現在讓我們說另一個線程獲得對該鎖的訪問權限。 調用pthread_cond_broadcast
后會發生什么? 在等待調用之后獲得對互斥鎖的控制的其他線程是否會失去對互斥鎖的控制? 究竟發生了什么?
線程通常會爭用互斥鎖。 什么都不會發生。 您可以將pthread_cond_wait
視為:
以原子方式解鎖互斥鎖並阻塞條件變量。
嘗試正常重新獲取互斥鎖。
返回。
pthread_cond_wait(&cv, &m)
等待兩個事件; 發信號以調節變量cv
和互斥鎖m
重新獲取鎖定。
在以下代碼段中,
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cv = PTHREAD_COND_INITIALIZER;
void producer_thread() {
pthread_mutex_lock(&m); // p1
// modify some_cond // p2
pthread_cond_broadcast(&cv); // p3
pthread_mutex_unlock(&m); // p4
}
void consumer_thread() {
pthread_mutex_lock(&m); // c1
while (!some_cond) // c2
pthread_cond_wait(&cv, &m); // c3
pthread_mutex_unlock(&m); // c4
}
這是一個可能的執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.