條件變量
條件變量用于自動(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文章
11441瀏覽量
212590 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28793 -
線程
+關(guān)注
關(guān)注
0文章
507瀏覽量
20060
發(fā)布評(píng)論請(qǐng)先 登錄
Linux下線程間通訊---讀寫鎖和條件變量

Linux多線程及線程間同步
Linux C 多線程編程之互斥鎖與條件變量實(shí)例詳解
多線程編程之Linux線程編程
linux多線程機(jī)制-線程同步
Linux多線程編程的高效開發(fā)
Linux多線程與同步
三種Linux中的常用多線程同步方式淺析

linux內(nèi)核中percpu變量的實(shí)現(xiàn)
互斥鎖及條件變量的使用

評(píng)論