條件變數是利用執行緒間共享的
全域性變數進行同步的一種機制,主要包括兩個動作:乙個執行緒等待"條件變數的條件成立"而掛起;另乙個執行緒使"條件成立"(給出條件成立訊號)。
為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。
等待和激發:
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
等待條件有兩種方式:
條件等待pthread_cond_wait()和計時等待pthread_cond_timedwait(),其中計時等待方式如果在給定時刻前條件沒有滿足,則返回etimedout,結束等待,其中abstime以與time()
系統呼叫相同意義的絕對時間形式出現,0表示
格林尼治時間2023年1月1日0時0分0秒。
無論哪種等待方式,都必須和乙個
互斥鎖配合,以防止多個執行緒同時請求pthread_cond_wait()(或pthread_cond_timedwait(),下同)的
競爭條件(race condition)。
激發條件有兩種形式,
pthread_cond_signal()啟用乙個等待該條件的執行緒,存在多個等待執行緒時按入隊順序啟用其中乙個;而pthread_cond_broadcast()則啟用所有等待執行緒。
使用案例:
pthread_mutex_lock (&mutex_analysis);
pthread_cond_wait (&cond_analysis, &mutex_analysis);
pthread_mutex_unlock (&mutex_analysis);
使用pthread_mutex_lock進行對本執行緒加鎖,在pthread_cond_wait掛起等待需要滿足的條件變數後,又對本執行緒進行解鎖。當條件變數滿足後,本執行緒又會被加鎖,和進入pthread_cond_wait前的加鎖動作是相同的。因此,需要再次對本執行緒進行解鎖,要用到pthread_mutex_unlock函式。
訊號啟用:pthread_cond_signal (&cond_analysis);
pthread cond wait 用法分析
很久沒看apue,今天一位朋友問道關於乙個mutex的問題,又翻到了以前討論過的東西,為了不讓自己忘記,把曾經的東西總結一下。先大體看下網上很多地方都有的關於pthread cond wait 的說明 現在來看一段典型的應用 看注釋即可。include include static pthread ...
pthread cond wait 用法分析
現在來看一段典型的應用 看注釋即可。include include static pthread mutex t mtx pthread mutex initializer static pthread cond t cond pthread cond initializer struct node...
pthread cond wait 用法分析
很久沒看apue,今天一位朋友問道關於乙個mutex的問題,又翻到了以前討論過的東西,為了不讓自己忘記,把曾經的東西總結一下。先大體看下網上很多地方都有的關於pthread cond wait 的說明 現在來看一段典型的應用 看注釋即可。cpp view plain copy print inclu...