pthread cond wait使用介紹

2021-08-21 06:22:57 字數 1157 閱讀 3369

條件變數是利用執行緒間共享的

全域性變數進行同步的一種機制,主要包括兩個動作:乙個執行緒等待"條件變數的條件成立"而掛起;另乙個執行緒使"條件成立"(給出條件成立訊號)。

為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。

等待和激發:

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...