1, 引入
在很多情況下,對於典型的生產者-消費者模型,多執行緒之間的同步,如直接使用mutex,除了生產者、消費者之間要競爭互斥量以外,消費者之間也需要競爭互斥量,但如果生產者中沒有資料,消費者之間競爭互斥鎖是無意義的。有了條件變數機制以後,只有生產者完成生產,才會引起消費者之間的競爭。這樣可以提高程式效率。
2, 定義
與mutex鎖配合使用實現執行緒同步的一種變數
3,介面
pthread_cond_t cond = pthread_cond_initializer;
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(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);
int pthread_cond_destroy(pthread_cond_t *cond);
4,例子
#include
#include
#include
#include
#include
struct msg ;
struct msg *g_head;
pthread_mutex_t mutex = pthread_mutex_initializer;
pthread_cond_t ready = pthread_cond_initializer;
void *producer(void *arg)
printf("there %d node in the link\n", cnt);
sleep(1);
return null;
}void *consumer(void *arg)
msg = g_head;
g_head = msg->next;
pthread_mutex_unlock(&mutex);
printf("consume node %d\n", msg->val);
sleep(3);
}int main()
Linux條件變數的使用
linux執行緒同步之間存在多種機制,條件變數是一種類似作業系統裡提到的生產者 消費者演算法的同步機制,允許執行緒以無競爭的方式等待特定條件的發生。示例偽 void thread1 void void thread2 void 條件變數需要配合互斥量一起使用,互斥量作為引數傳入wait函式,函式把呼...
Linux下條件變數詳解
條件變數可以讓執行緒在滿足特定的條件下暫停 睡眠 需要與互斥量配合使用。pthread cond t cond pthread cond initializer 通過巨集對條件變數初始化 int pthread cond init pthread cond t cond,pthread condat...
linux條件變數
linux條件變數 條件變數 條件變數是利用執行緒間共享是全域性變數進行同步的一種機制。條件變數巨集觀上類似if語句,符合條件就能執行某段程式,否則只能等待條件成立。一 函式 pthread cond init函式 初始化條件變數 pthread cond wait函式 基於條件變數阻塞,無條件等待...