Linux下條件變數詳解

2021-09-26 06:37:11 字數 861 閱讀 3783

條件變數可以讓執行緒在滿足特定的條件下暫停(睡眠),需要與互斥量配合使用。

pthread_cond_t cond = pthread_cond_initializer;

通過巨集對條件變數初始化

int pthread_cond_init (pthread_cond_t cond,pthread_condattr_t cond_attr);

功能:初始化條件變數

cond:待初始化的條件變數

cond_attr:條件變數的屬性

int pthread_cond_destroy(pthread_cond_t *cond);
功能:銷毀條件變數
int pthread_cond_wait (pthread_cond_t *cond,pthread_mutex_t *mutex);
功能:讓呼叫者執行緒進入睡眠,並解鎖乙個互斥量

cond:執行緒睡入的條件變數

mutex:執行緒睡眠前的要解鎖的互斥量(是不是鎖定狀態沒有關係)

int pthread_cond_signal(pthread_cond_t *cond);
功能:喚醒條件變數中的乙個執行緒

注意:執行緒醒的前提條件是互斥量必須是解鎖狀態的,執行緒醒前會再次加鎖,如果不能加鎖就不會醒來。

int pthread_cond_timedwait (pthread_cond_t *cond,pthread_mutex_t *mutex,struct timespec abstime)
功能:讓呼叫者執行緒進入睡眠(指定睡眠時間),並解鎖乙個互斥量

注意:使用的是系統時間。

詳解條件變數

一年多過去啦,一段時間沒有posix多執行緒的東西,又忘記的差不多略,我打記性咋這麼差,絲毫記不起來怎麼用啦,還是不如爛筆頭啊。lock wait unlock.在呼叫pthread cond wait cond,mutex 時的執行順序是這樣的 1.首先獲取外面的mutex,然後當前wait pu...

Linux 下條件變數的使用

1,引入 在很多情況下,對於典型的生產者 消費者模型,多執行緒之間的同步,如直接使用mutex,除了生產者 消費者之間要競爭互斥量以外,消費者之間也需要競爭互斥量,但如果生產者中沒有資料,消費者之間競爭互斥鎖是無意義的。有了條件變數機制以後,只有生產者完成生產,才會引起消費者之間的競爭。這樣可以提高...

linux條件變數

linux條件變數 條件變數 條件變數是利用執行緒間共享是全域性變數進行同步的一種機制。條件變數巨集觀上類似if語句,符合條件就能執行某段程式,否則只能等待條件成立。一 函式 pthread cond init函式 初始化條件變數 pthread cond wait函式 基於條件變數阻塞,無條件等待...