執行緒中的 條件變數 pthread cond t

2022-08-29 03:30:11 字數 2327 閱讀 9680

#include #include #include pthread_mutex_t mutex = pthread_mutex_initializer;/*初始化互斥鎖*/

pthread_cond_t cond = pthread_cond_initializer;/*初始化條件變數*/

void *thread1(void *);

void *thread2(void *);

int i=1;

int main(void)

void *thread1(void *junk)

pthread_mutex_unlock(&mutex);/*解鎖互斥量*/

printf("thread1: unlock %d\n\n", __line__);

sleep(1); }}

void *thread2(void *junk)

pthread_mutex_unlock(&mutex);

printf("thread2: unlock %d\n\n", __line__);

sleep(1);

}}

編譯:gcc test.c -o test -lpthread

邏輯:主函式 建立 兩個執行緒 1,2

執行緒1:累加 i ,每次都互斥鎖 當i 是3的倍數的時候 傳送 改變條件訊號給執行緒2 ;

執行緒2:當 i <6 時,不斷互斥鎖操作,當 不是3的倍數的時候等待 調節改變 訊號,阻塞執行緒;

1=1時 ;

執行緒2:i 不 整除 3 阻塞等待 條件改變訊號;

執行緒1:正常累加 i=2

i=2執行緒2:阻塞

執行緒1:不整除 3 ,正常累加

i=3執行緒2:阻塞

執行緒1:整除 ,接受到傳送 的條件改變訊號;

執行緒2 解鎖,正常執行 睡一秒

i=4執行緒2:i 等於四 阻塞

執行緒1:不整除 3 ,正常累加

i=5執行緒2:i 等於四 阻塞

執行緒1:不整除 3 ,正常累加

i=6執行緒2:接受到訊號 解鎖

執行緒1:傳送訊號

執行:2222222222222 in pthread2 i is 1 222222222222222222

thread2: lock line:46 i is 1

thread2: wait 1 48

1111111111 i is 1 111111111111

thread1: lock 27

thread1: unlock 35

1111111111 i is 2 111111111111

thread1: lock 27

thread1: unlock 35

1111111111 i is 3 111111111111

thread1: lock 27

thread1:signal 1 line:29 i is 3

thread1:signal 2 31

thread1: unlock 35

thread2: wait 2 53

thread2: i is 3

thread2: unlock 57

2222222222222 in pthread2 i is 3 222222222222222222

thread2: lock line:46 i is 3

thread2: unlock 57

1111111111 i is 4 111111111111

thread1: lock 27

thread1: unlock 35

2222222222222 in pthread2 i is 4 222222222222222222

thread2: lock line:46 i is 4

thread2: wait 1 48

1111111111 i is 5 111111111111

thread1: lock 27

thread1: unlock 35

1111111111 i is 6 111111111111

thread1: lock 27

thread1:signal 1 line:29 i is 6

thread1:signal 2 31

thread1: unlock 35

thread2: wait 2 53

thread2: i is 6

thread2: unlock 57

pthread條件變數深入解析

用條件變數實現事件等待器的正確與錯誤做法 提到了8種 基於 linux pthread 條件變數實現的 waiter classes,並分析了幾種錯誤實現的錯誤之處。本文進一步分析一下幾種正確實現的程式行為,加深對linux pthread 條件變數的理解。下面給出乙個可以用於single wait...

多執行緒中條件變數的使用

如果想要實現在乙個執行緒中需要一直等待某種條件被滿足的時候,該執行緒才會進行處理,這個時候可以使用條件變數的方式來實現 乙個執行緒中進行wait,另一線程中當條件滿足時發出通知notify,這樣就不需要一直進行while迴圈進行判斷條件了 例如生產者和消費者情況 include include in...

多執行緒的條件變數

條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。1 建立和登出 條件變數和互斥鎖一樣,都有靜態動態兩種建立方式,靜態方式使用pt...