條件變數是執行緒可用的另一種同步機制。條件變數給多個執行緒提供了乙個會合的場所。條件本身是由互斥量保護的。執行緒在改變 條件狀態前必須首先鎖住互斥量。
條件變數的初始化 pthread_cond_init
去除初始化 pthread_cond_destroy
等待 pthread_cond_wait
滿足條件給向程序傳送訊號 pthread_cond_signal
下面程式展示了利用條件變數等待另外兩個執行緒滿足條件時,第三個程序繼續向前執行
#include
#include
#include
pthread_mutex_t m1, m2;
pthread_cond_t c1,c2;
pthread_t t1, t2, t3;
void* r1(void *arg)
void* r2(void *arg)
void* r3(void *arg)
main()
執行結果
條件變數與互斥量一起使用時,允許執行緒以無競爭的方式等待特定的條件發生。
下面程式中,由於在互斥量中等待條件會造成死鎖
#include
#include
#include
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
}
void *r2(void *d)
}
main()
執行結果,程式執行到某一時刻發生死鎖,不再向下執行
改進後的程式,允許執行緒以無競爭的方式等待,不會發生死鎖
#include
#include
#include
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
}
void *r2(void *d)
}
main()
Linux執行緒同步之條件變數
與互斥鎖不同,條件變數是用來等待而不是用來上鎖的。條件變數用來自動阻塞乙個執行緒,直到某特殊情況發生為止。通常條件變數和互斥鎖同時使用。條件變數使我們可以睡眠等待某種條件出現。條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙...
Linux執行緒同步之 條件變數
條件變數是執行緒可用的另一種同步機制。條件變數給多執行緒提供了乙個會合的場所。它主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 條件變數與互斥量一起使用時,允許執行緒以無競爭的方式等待特定的條件發生。條件變數本身是互斥量保護的。執行緒在改變條...
Linux執行緒同步之條件變數
條件變數變數也是出自posix 執行緒標準,另一種執行緒同步機制,主要用來等待某個條件的發生。可以用來同步同一程序中的各個執行緒。當然如果乙個條件變數存放在多個程序共享的某個記憶體區中,那麼還可以通過條件變數來進行程序間的同步。每個條件變數總是和乙個互斥量相關聯,條件本身是由互斥量保護的,執行緒在改...