#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...