我的程序有三个线程,我正在尝试学习同步和线程安全。下面我概述了不同线程的作用,但我想学习如何使用事件来触发不同线程中的每个进程,而不是无限读取(这给了我并发问题)。
谷歌搜索引发了许多选择,但我不确定在这种情况下最好实现什么 - 你能否指出我可以学习最好地实现这一点的标准方法/事件的方向?
我在 VS 2012 上这样做,理想情况下我不会使用外部库,例如 boost。
线程 1:接收消息并将其推送到全局队列中,queue<my_class> msg_in
.
线程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
}
}
}