Linux 下條件變數的使用

2021-10-09 11:37:00 字數 1297 閱讀 2019

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函式 基於條件變數阻塞,無條件等待...