條件變量
條件變量用于自動阻塞線程,直到某個特定事件發生或某個條件滿足為止,通常情況下,條件變量是和互斥鎖一起搭配使用的。使用條件變量主要包括兩個動作:
- 一個線程等待某個條件滿足而被阻塞;
- 另一個線程中,條件滿足時發出“信號”。
條件變量通常搭配互斥鎖來使用,是因為條件的檢測是在互斥鎖的保護下進行的,也就是說條件本身是由互斥鎖保護的,線程在改變條件狀態之前必須首先鎖住互斥鎖,不然就可能引發線程不安全的問題。
初始化和銷毀條件變量
#include < pthread.h >
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t *cond);
條件變量的主要操作是發送信號(signal)和等待。發送信號操作即是通知一個或多個處于等待狀態的線程,某個共享變量的狀態已經改變,這些處于等待狀態的線程收到通知之后便會被喚醒,喚醒之后再檢查條件是否滿足。等待操作是指在收到一個通知前一直處于阻塞狀態。
函數 pthread_cond_signal()和 pthread_cond_broadcast()均可向指定的條件變量發送信號,通知一個或多個處于等待狀態的線程。調用 pthread_cond_wait()函數是線程阻塞,直到收到條件變量的通知。
通知條件變量
#include < pthread.h >
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
pthread_cond_signal()函數至少能喚醒一個線程,而 pthread_cond_broadcast()函數則能喚醒所有線程。
等待條件變量
#include < pthread.h >
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
-
Linux
+關注
關注
87文章
11123瀏覽量
207919 -
變量
+關注
關注
0文章
607瀏覽量
28257 -
線程
+關注
關注
0文章
501瀏覽量
19580
發布評論請先 登錄
相關推薦
評論