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