pthread_cond_init函式
pthread_cond_destroy函式
pthread_cond_wait函式
pthread_cond_timedwait函式
pthread_cond_signal函式
pthread_cond_broadcast函式
以上6 個函式的返回值都是:成功返回0, 失敗直接返回錯誤號。
pthread_cond_init
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
引數:
cond: pthread_cond_t 型別的條件變數
attr: 屬性,預設傳null
也可以使用靜態初始化:
pthread_cond_t cond = pthread_cond_initializer;
pthread_cond_destroy
int pthread_cond_destroy(pthread_cond_t *cond);
pthread_cond_wait
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
引數:
cond:條件變數
mutex:互斥量
在第一次呼叫之前先給mutex上鎖,呼叫pthread_cond_wait函式會將鎖釋放,並阻塞直到被喚醒,被喚醒後對mutex上鎖成功後返回,否則阻塞直到上鎖成功。
pthread_cond_timedwait
int pthread_cond_timedwait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);
引數
abstime:絕對時間
struct timespec
阻塞超時後返回。
pthread_cond_signal
int pthread_cond_signal(pthread_cond_t *cond);
喚醒至少乙個條件變數。
pthread_cond_broadcast
int pthread_cond_broadcast(pthread_cond_t *cond);
喚醒全部的條件變數。
條件變數實現生產者消費者模型
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
pthread_mutex_t mutex;
pthread_cond_t cond;
queue<
int>qu;
void
str_error()
void
*fun1
(void
* arg)
return
null;}
void
*fun2
(void
* arg)
int i = qu.
front()
; qu.
pop();
printf
("consumer poped %d from queue\n"
,i);
pthread_mutex_unlock
(&mutex);}
return
null;}
intmain()
linux筆記之條件變數
條件變數的銷毀函式 條件變數等待函式 條件變數有兩個等待函式。二者的區別就在於pthread cond timedwait 比pthread cond wait 函式多了乙個引數abstime,此引數可以設定等待超時,如果達到abstime所指定的時刻,仍然沒有別的執行緒來喚醒當前執行緒,就返回et...
Linux執行緒同步之條件變數
與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。條件變數使我們可以睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙...
linux 執行緒學習之條件變數
下面是乙個簡單的例子,我們可以從程式的執行來了解條件變數的作用。include include include pthread mutex t mutex pthread mutex initializer 初始化互斥鎖 pthread cond t cond pthread cond initia...