#include
"pch.h"
#include
#include
#include
#include
#include
// c++ stl所有的容器都不是執行緒安全
using
namespace std;
#if 0
/*unique_lock condition_variable
1.lock_guard和unique_lock
2.condition_variable wait和notify_all方法
*/std::mutex mtx;
// pthread_mutex_t
std::condition_variable cv;
// pthread_condition_t
intmain()
/*c++多執行緒程式設計 - 執行緒間的同步通訊機制
多執行緒程式設計兩個問題:
1.執行緒間的互斥
竟態條件 =》 臨界區**段 =》 保證原子操作 =》互斥鎖mutex 輕量級的無鎖實現cas
strace ./a.out mutex => pthread_mutex_t
2.執行緒間的同步通訊
生產者,消費者執行緒模型
*/std::mutex mtx;
// 定義互斥鎖,做執行緒間的互斥操作
std::condition_variable cv;
// 定義條件變數,做執行緒間的同步通訊操作
// 生產者生產乙個物品,通知消費者消費乙個;消費完了,消費者再通知生產者繼續生產物品
class
queue
que.
push
(val)
;/*
notify_one:通知另外的乙個執行緒的
notify_all:通知其它所有執行緒的
通知其它所有的執行緒,我生產了乙個物品,你們趕緊消費吧
其它執行緒得到該通知,就會從等待狀態 =》 阻塞狀態 =》 獲取互斥鎖才能繼續執行
*/cv.
notify_all()
; cout <<
"生產者 生產:"
<< val <<
"號物品"
<< endl;
}int
get(
)// 消費物品
int val = que.
front()
; que.
pop();
cv.notify_all()
;// 通知其它執行緒我消費完了,趕緊生產吧
cout <<
"消費者 消費:"
<< val <<
"號物品"
<< endl;
return val;
}private
: queue<
int> que;};
void
producer
(queue *que)
// 生產者執行緒
}void
consumer
(queue *que)
// 消費者執行緒
}int
main()
#endif
執行緒間通訊 生產者消費者模型
所謂的執行緒間通訊,其實就是多個執行緒再操作同乙個資源,但是操作的動作不同。當某個執行緒進入synchronized塊後,共享資料的狀態不一定滿足該執行緒的需要,需要其他執行緒改變共享資料的狀態後才能執行,而由於當時執行緒對共享資源時獨佔的,它必須解除對共享資源的鎖定的狀態,通知其他執行緒可以使用該...
執行緒間通訊 生產者消費者實踐
簡單生產者消費者問題 現有兩個執行緒a b,對乙個初始值未零的數加減一的操作,不能為負數,二者必須要實現輪流操作 操作十次 就在前不久自己也遇到了乙個這樣的問題,但是沒有考慮到的是執行緒的通訊,利用迴圈完成的輪流執行,唉 慘,不多說了重新來!再一次 高內聚低耦合前提下實現執行緒操作資源類!資源類 c...
執行緒 執行緒間通訊(生產者消費者模式)
注意 1.執行緒間的通訊,共享的資料一定要有同步 塊synchronized 2.一定要有wait和notify,而且二者一定是成對出現 3.生產者和消費者的執行緒實現一定是在while true 裡面public class basket public void setempty boolean ...