我的程序有三個線程,我正在嘗試瞭解同步和線程安全。下面我概述了不同線程的作用,但我想了解如何使用事件來觸發不同線程中的每個進程,而不是無限地讀取(這給我的併發性問題)。多線程和使用事件
谷歌搜索引發了很多選擇,但我不確定什麼是最好的實施在這種情況下 - 你能指出一個標準的方法/事件,我可以學習最好地實現這個方向?
我在VS 2012上這樣做,理想情況下我不會使用外部庫例如促進。
線程1:接收消息並將其推入全局隊列queue<my_class> msg_in
。線程2:關於無限循環(即while(1)
);線程2:關於無限循環(即while(1)
);線程2:關於無限循環(即while(1)
);等到if (!msg_in.empty())
,做一些處理,並將其推入全球map<map<queue<my_class>>> msg_out
。
while (1)
{
if (!msg_in.empty())
{
//processes
msg_map[i][j].push(); //i and j are int (irrelevant here)
}
}
主題3:
while (1)
{
if (msg_map.find(i) != msg_map.end())
{
if (!msg_map[i].find(j)->second.empty())
{
//processes
}
}
}