【发布时间】:2016-04-07 11:12:53
【问题描述】:
我想在一个线程中等待两个bool 变量为真。它们在不同的地方被改变。我可以在我的项目中使用 boost,但不能在 C++11 中使用。
我确实找到了有关如何使用互斥锁和条件变量的信息,但我不确定是否可以等待两个互斥锁。
这是我的程序的一些伪代码。
bool job1_dataready, job2_dataready;
//t1:
void job1()
{
//do stuff
job1_dataready = true;
}
//t2:
void job2()
{
//do stuff
job2_dataready= true;
}
main()
{
boost::thread t1(job1);
boost::thread t1(job2);
if(job1_dataready&& job2_dataready)
{
//do stuff with data from both jobs
}
}
【问题讨论】:
-
您似乎忘记在问题中包含问题。
-
您的布尔值不受互斥锁或其他同步机制的保护,也不是原子的。这意味着来自主线程和工作线程的访问将是不同步的,因此是未定义的行为。 (这不是您问题的答案,只是为了指出您当前的尝试不会去任何地方。)
标签: c++ multithreading thread-safety thread-synchronization