【发布时间】:2014-05-13 14:57:27
【问题描述】:
我的应用程序中有三个线程,第一个线程需要等待其他两个线程的数据准备好。两个线程同时准备数据。 为了做到这一点,我在 C++ 中使用条件变量如下:
boost::mutex mut;
boost::condition_variable cond;
线程1:
bool check_data_received()
{
return (data1_received && data2_received);
}
// Wait until socket data has arrived
boost::unique_lock<boost::mutex> lock(mut);
if (!cond.timed_wait(lock, boost::posix_time::milliseconds(200),
boost::bind(&check_data_received)))
{
}
线程2:
{
boost::lock_guard<boost::mutex> lock(mut);
data1_received = true;
}
cond.notify_one();
线程3:
{
boost::lock_guard<boost::mutex> lock(mut);
data2_received = true;
}
cond.notify_one();
所以我的问题是这样做是否正确,或者有没有更有效的方法?我正在寻找最优化的等待方式。
【问题讨论】:
-
“最优化的方式”来“等待”是一个令人惊讶的强大矛盾:)
-
@sehe 我知道等待是不好的,并且会影响工作的并行性。这就是为什么我想知道,如果有另一种方法来实现我想要的:)
标签: c++ multithreading boost