改善多线程通信?

时间:2014-06-08 11:05:21

标签: c++

这是线程#1上的代码:

move = false;
//start thread #2
while(!move) Sleep(5);
//do stuff

线程#2代码:

//do stuff
move = true;

是否有更好的方法可以等待移动的更改,例如,执行所谓的阻止,直到在网络中读取数据?

2 个答案:

答案 0 :(得分:1)

使用C ++ 11?使用std :: condition_variable。

答案 1 :(得分:1)

你拥有的是一种方式。

还有其他可以使用的东西。我想到了一些:

使用条件

condition是你可以 wait()代码的其他部分(线程)的地方 signal()你可以继续

条件与互斥锁相关

在您的代码中:

线程#1

// start thread #2
mutex.acquire();
// You could check for an actual condition here if it
// is more complex than a true false.
condition.wait();
// If we're checking for a complex condition here
// we should re-evaluate in case it is not satisfied.
mutex.release();

线程#2

// do stuff
mutex.acquire();
condition.signal();
mutex.release();

使用未来

Future是用于表示异步操作结果的更高级别构造。

它或多或少都是这样的:

  1. 调用者创建一个Future对象并保留对它的引用,并将引用传递给执行异步操作的线程。
  2. 调用者继续处理,而另一个线程执行其任务。
  3. 如果调用者需要结果,它将尝试从Future对象获取它。如果结果尚未可用,则呼叫者将被阻止(例如使用条件/信号),直到异步操作结束并设置值(发送信号)。
  4. 如果异步操作在需要之前完成,则调用者将无需等待即可获得结果。