linux條件變數

2021-07-06 08:40:21 字數 2066 閱讀 1131

linux條件變數

條件變數

條件變數是利用執行緒間共享是全域性變數進行同步的一種機制。條件變數巨集觀上類似if語句,符合條件就能執行某段程式,否則只能等待條件成立。

一、函式

pthread_cond_init函式:初始化條件變數

pthread_cond_wait函式:基於條件變數阻塞,無條件等待

pthread_cond_timedwait函式:阻塞直到指定事件發生,計時等待

pthread_cond_signal函式:解除特定執行緒的阻塞,存在多個等待執行緒時按入隊順序啟用其中乙個

pthread_cond_broadcast函式:解除所有執行緒的阻塞

pthread_cond_destroy函式:清楚條件變數

二、條件變數初始化:

pthread_cond_t cond =pthread_cond_initializer

int pthread_cond_int(pthread_cond_t *cond,pthread_condattr_t *cond_attr);

cond_attr引數是條件變數的屬性,由於其並沒有得到實現,所以它的值通常是null

三、等待條件成立的兩個函式

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);

pthread_cond_wait函式釋放由mutex指向的互斥鎖,同時使當前執行緒關於cond指向的條件變數阻塞,直到條件被訊號喚醒。

如果條件表示式為假,那麼執行緒基於條件變數阻塞。當乙個執行緒改變條件變數時,條件變數獲得乙個訊號,使得等待條件的執行緒退出阻塞狀態。

pthread_cond_timedwait函式將阻塞直到條件變數獲得訊號或者經過由abstime指定的時間。也就是說,如果在給定時間前條件沒有滿足,則返回etimeout,結束等待。

四、啟用條件變數

int pthread_cond_signal(pthread_cond_t*cond);

int pthread_cond_broadcast(pthread_cond_t*cond);

pthread_cond_signal按順序啟用等待的執行緒,pthread_cond_broadcast啟用所有等待的執行緒。

五、清除

int pthread_cond_destroy(pthread_cond_t*cond);

六、**

#include

#include

#include

#include

pthread_cond_t threadcond;

pthread_mutex_t threadmutex;

void* threadone(void *arg)

//pthread_mutex_unlock(&threadmutex); }

int main(int argc, char **argv)

pthread_cond_init(&threadcond,null);

pthread_mutex_init(&threadmutex,null);

pthread_tthreadid;

if(pthread_create(&threadid,null, threadone, null) != 0)

usleep(5000000);

pthread_cond_signal(&threadcond);

usleep(5000);

pthread_cond_signal(&threadcond);

usleep(5000);

pthread_cond_signal(&threadcond);

usleep(5000000);

pthread_cond_destroy(&threadcond);

pthread_mutex_destroy(&threadmutex);

return0; }

Linux 條件變數

當乙個執行緒互斥地訪問某個變數時,它可能發現在其它執行緒改變狀態之前,它什麼也做不了。例如 乙個執行緒訪問佇列時,發現隊列為空,它只能等待,直到其它執行緒將乙個節點新增到佇列中。類似這種情況就需要用到條件變數。同步概念與競態條件 同步 在保證資料安全的前提下,讓執行緒能夠按照某種特定的順序訪問臨界資...

Linux 條件變數

與互斥鎖不同,條件變數是用來等待而不是用來上鎖的,乙個條件變數對應乙個等待佇列。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 喚醒執行緒。1 pthread cond t cond ...

Linux 條件變數

條件變數 1.問題 某些情況下,某些執行緒有這個需求 僅當滿足某個特定條件時,才執行對應操作 如果該條件不滿足,就阻塞該執行緒,一直等到對應的條件滿足才繼續執行。解決方案 當條件滿足時,使用訊號量喚醒對應執行緒,當條件不滿足時,使用訊號量阻塞對應執行緒。並用互斥量 互斥鎖 來保護對該條件的訪問。li...