Linux執行緒同步之條件變數

2021-09-30 23:49:23 字數 1101 閱讀 2743

條件變數是執行緒可用的另一種同步機制。條件變數給多個執行緒提供了乙個會合的場所。條件本身是由互斥量保護的。執行緒在改變 條件狀態前必須首先鎖住互斥量。

條件變數的初始化 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 執行緒標準,另一種執行緒同步機制,主要用來等待某個條件的發生。可以用來同步同一程序中的各個執行緒。當然如果乙個條件變數存放在多個程序共享的某個記憶體區中,那麼還可以通過條件變數來進行程序間的同步。每個條件變數總是和乙個互斥量相關聯,條件本身是由互斥量保護的,執行緒在改...