pthread_cond_signal

pthread_cond_signal函式的作用是傳送一個信號給另外一個正在處於阻塞等待狀態的執行緒,使其脫離阻塞狀態,繼續執行.如果沒有執行緒處在阻塞等待狀態,pthread_cond_signal也會成功返回。

基本介紹

  • 外文名:pthread_cond_signal
  • 實質:一種函式
  • 特點:不會有“驚群現象”產生
  • 用於:計算機編程
內容簡介,用法,之間,之後,

內容簡介

但使用pthread_cond_signal不會有“驚群現象”產生,他最多只給一個執行緒發信號。假如有多個執行緒正在阻塞等待著這個條件變數的話,那么是根據各等待執行緒優先權的高低確定哪個執行緒接收到信號開始繼續執行。如果各執行緒優先權相同,則根據等待時間的長短來確定哪個執行緒獲得信號。但無論如何一個pthread_cond_signal調用最多發信一次。
另外,互斥量的作用一般是用於對某個資源進行互斥性的存取,很多時候是用來保證操作是一個原子性的操作,是不可中斷的。

用法

pthread_cond_wait必須放在pthread_mutex_lock和pthread_mutex_unlock之間,因為他要根據共享變數的狀態來決定是否要等待,而為了不永遠等待下去所以必須要在lock/unlock隊中
共享變數的狀態改變必須遵守lock/unlock的規則
pthread_cond_signal即可以放在pthread_mutex_lock和pthread_mutex_unlock之間,也可以放在pthread_mutex_lock和pthread_mutex_unlock之後,但是各有優缺點。

之間

pthread_mutex_lock
xxxxxxx
pthread_cond_signal
pthread_mutex_unlock
缺點:在某些執行緒的實現中,會造成等待執行緒從核心中喚醒(由於cond_signal)然後又回到核心空間(因為cond_wait返回後會有原子加鎖的行為),所以一來一回會有性能的問題。但是在LinuxThreads或者NPTL裡面,就不會有這個問題,因為在Linux 執行緒中,有兩個佇列,分別是cond_wait佇列和mutex_lock佇列, cond_signal只是讓執行緒從cond_wait佇列移到mutex_lock佇列,而不用返回到用戶空間,不會有性能的損耗。
所以在Linux中推薦使用這種模式。

之後

pthread_mutex_lock
xxxxxxx
pthread_mutex_unlock
pthread_cond_signal
優點:不會出現之前說的那個潛在的性能損耗,因為在signal之前就已經釋放鎖了
缺點:如果unlock和signal之前,有個低優先權的執行緒正在mutex上等待的話,那么這個低優先權的執行緒就會搶占高優先權的執行緒(cond_wait的執行緒),而這在上面的放中間的模式下是不會出現的。
所以,在Linux下最好pthread_cond_signal放中間,但從編程規則上說,其他兩種都可以

相關詞條

熱門詞條

聯絡我們