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