pthread_cond_wait

pthread_cond_wait

條件變數是利用執行緒間共享的全局變數進行同步的一種機制,主要包括兩個動作:一個執行緒等待"條件變數的條件成立"而掛起;另一個執行緒使"條件成立"(給出條件成立信號)。為了防止競爭,條件變數的使用總是和一個互斥鎖結合在一起。

基本介紹

  • 中文名:多執行緒的條件變數
  • 外文名:pthread_cond_wait
  • 動作一:條件變數的條件成立
  • 動作二:"條件成立"(給出條件成立信號)
  • 目的:為了防止競爭
  • 搭配:和一個互斥鎖結合在一起
簡介,創建和註銷,等待和激發,

簡介

多執行緒的條件變數

創建和註銷

條件變數和互斥鎖一樣,都有靜態動態兩種創建方式,靜態方式使用PTHREAD_COND_INITIALIZER常量,如下:
pthread_cond_t cond=PTHREAD_COND_INITIALIZER
動態方式調用pthread_cond_init()函式,API定義如下:
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)
儘管POSIX標準中為條件變數定義了屬性,但在LinuxThreads中沒有實現,因此cond_attr值通常為NULL,且被忽略。
註銷一個條件變數需要調用pthread_cond_destroy(),只有在沒有執行緒在該條件變數上等待的時候才能註銷這個條件變數,否則返回EBUSY。因為Linux實現的條件變數沒有分配什麼資源,所以註銷動作只包括檢查是否有等待執行緒。API定義如下:
int pthread_cond_destroy(pthread_cond_t *cond)

等待和激發

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表示格林尼治時間1970年1月1日0時0分0秒。
無論哪種等待方式,都必須和一個互斥鎖配合,以防止多個執行緒同時請求pthread_cond_wait()(或pthread_cond_timedwait(),下同)的競爭條件(Race Condition)。mutex互斥鎖必須是普通鎖(PTHREAD_MUTEX_TIMED_NP)或者適應鎖(PTHREAD_MUTEX_ADAPTIVE_NP),且在調用pthread_cond_wait()前必須由本執行緒加鎖(pthread_mutex_lock()),而在更新條件等待佇列以前,mutex保持鎖定狀態,並線上程掛起進入等待前解鎖。在條件滿足從而離開pthread_cond_wait()之前,mutex將被重新加鎖,以與進入pthread_cond_wait()前的加鎖動作對應。阻塞時處於解鎖狀態。

相關詞條

熱門詞條

聯絡我們