讀寫鎖,互斥鎖並不是任何時候都能阻塞執行緒執行
1. 假設有執行緒操作如下:
a. 煉表頭節點node *head = null
b. wile(head == null)
//鍊錶中不為空時執行**段
...
條件變數
1. 條件變數並不是鎖,本質是一組函式,用來阻塞執行緒
2. 條件變數 + 互斥鎖 = 執行緒同步
a. 互斥鎖:保護一塊共享資料
b. 條件變數:引起阻塞
3. 動作:
a. 阻塞執行緒
b. 喚醒乙個阻塞的執行緒
4. 條件變數型別:
pthread_cond_t cond
5. 初始化條件變數:
pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
6. 銷毀條件變數:
pthread_cond_destroy(pthread_cond_t *cond);
7. 阻塞等待
pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
作用:a. 阻塞執行緒
b. 將已經上鎖的mutex解鎖,這樣可以讓其他執行緒操作保護的共享資源
c. 當執行緒解除阻塞時,會對mutex進行加鎖狀態,保持之前的狀態一致
8. 限時等待乙個條件變數:
pthread_cond_timedwait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);
9. 喚醒阻塞執行緒:
a. 至少喚醒乙個:
pthread_cond_signal(pthread_cond_t *cond); //如果阻塞了10個,則至少喚醒1個
b. 喚醒全部:
pthread_cond_broadcast(pthread_cond_t *cond); //如果阻塞了10個,則喚醒10個
Linux執行緒同步 條件變數
執行緒間的同步還有乙個情況 程序a 需要等待乙個條件成立,才執行,當條件不成立時就阻塞等待 程序b 需要設定條件,當條件成立時,喚醒程序a.這裡我們就可以用到條件變數。條件變數變數也是出自posix執行緒標準,另一種執行緒同步機制,主要用來等待某個條件的發生,然後進行相應的操作,這樣可以消除多執行緒...
Linux 執行緒同步 條件變數
pthread cond signal 使在條件變數上等待的執行緒中的乙個執行緒重新開始。如果沒有等待的執行緒,則什麼也不做。如果有多個執行緒在等待該條件,只有乙個能重啟動,但不能指定哪乙個。pthread cond broadcast 重啟動等待該條件變數的所有執行緒。如果沒有等待的執行緒,則什麼...
Linux執行緒同步之條件變數
與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。條件變數使我們可以睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙...