pthread cond t 相關函式

2021-06-18 23:29:02 字數 2532 閱讀 6320

1、int  pthread_cond_init(pthread_cond_t * pcond , pthread_condattr_t * pattr);

用於初始化申明的條件變數。 引數pcond指向使用者分配的未初始化的條件變數,引數pattr指定條件變數的屬性;如果pattr值為null,則條件變數的屬性將以系統規定的預設屬性初始化。

如果pcond指向乙個已經被初始化的條件變數,函式行為將是不確定的:結果一,函式返回ebusy;結果二,重新初始化得到乙個新條件變數。

2、

int  

pthread_cond_wait(pthread_cond_t * pcond , pthread_mutex_t * pmutex)

用於使呼叫該函式的執行緒在條件變數pcond上阻塞。引數pcond指向條件變數,引數pmutex指向乙個互斥體;條件變數總是和乙個互斥體關聯使用,互斥體保證所有執行緒等待該條件變數時的互斥訪問。

pthread_mutex_lock(pmutex);  

pthread_cond_wait(pcond , pmutex);  

pthread_mutex_unlock(pmutex);

3、

int  

pthread_cond_timedwait(pthread_cond_t * pcond , pthread_mutex_t * pmutex , const struct timespec *pabstime)

用途與 pthread_cond_wait()相似,只是加了乙個等待時間。

pthread_cond_wait()會一直等待條件知道條件被觸發,

pthread_cond_timedwait()多了乙個超時控制,如果到了指定時間但條件還沒被觸發,函式將返回etimedout。

4、int  pthread_cond_signal(pthread_cond_t * pcond)

解除pcond上乙個等待執行緒阻塞,如果沒有執行緒在阻塞,該次呼叫不進行任何操作。

int pthread_cond_broadcast(pthread_cond_t * pcond)

解除pcond上所有阻塞的執行緒,如果沒有執行緒在阻塞,該次操作不進行任何操作。廣播觸發解除多個阻塞的等待執行緒,這些執行緒將競爭以重新鎖定互斥體,排程策略決定執行緒的順序。

5、int  pthread_cond_destroy(pthread_cond_t * pcond)

用於刪除條件變數。成功返回0,如果條件變數還被某個執行緒持有,則函式返回ebusy。

**示例:

include 

include 

include 

include 

include 

pthread_t 

thread

;  pthread_cond_t cond;  

pthread_mutex_t mutex;  

unsigned 

char

flag = 1;  

void

* thr_fn(

)  

pthread_mutex_unlock(&mutex);  

/* 解除對互斥體的鎖定 */

printf(「

thread

exit\n」);  

}  

int

main()  

while

((c = getchar()) != 『q』);  

printf(「now terminate the 

thread

!\n」);  

flag = 0;  

pthread_mutex_lock(&mutex);  

/* 因為子執行緒在等待觸發訊號時解除對互斥體的鎖定,所以在此可以鎖

定互斥體 */

pthread_cond_signal(&cond);  

/* 發觸發訊號喚醒阻塞在條件變數上的執行緒 */

pthread_mutex_unlock(&mutex);  

/* 解除互斥體讓阻塞執行緒重新鎖定互斥體 */

printf(「wait 

for

thread

to exit\n」);  

pthread_join(thread, null);  

/* 等待子執行緒結束 */

printf(「bye\n」);  

return

0;  

}  

pthread cond t條件變數

條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。一 pthread cond wait定義 函式原型 int pthread c...

條件變數pthread cond t

unix環境高階程式設計 多執行緒同步,看到他舉例說條件變數pthread cond t怎麼用,愣是沒有看懂,只好在網上找了份 跑了跑,才弄明白.1.include include include pthread mutex t mutex pthread mutex initializer 初始化...

條件變數pthread cond t

最近看 unix環境高階程式設計 on裝置多執行緒程式 同步,看到他舉例說條件變數pthread cond t怎麼用,愣是沒有看懂,只好在網上找了份 跑了跑,才弄明白 cpp view plain copy include include include pthread mutex t mutex ...