我试图在c ++ 11中使用condition_variable来同步两个线程。 我在ubuntu下使用eclipse,一切都是用g ++编译的。 两个线程都在同一个类中。 第一个线程递增类的私有变量:
void Test::test::Loop()
{
int loops = 48;
while (loops > 0)
{
std::lock_guard<std::mutex> lock(this->m);
this->index++;
// Simulate work
std::this_thread::sleep_for(std::chrono::milliseconds(10));
this->Processed = true;
this->c.notify_one();
loops--;
}
return;
}
作为第一个测试,我想在另一个帖子中显示this-&gt;索引:
void Test::test::Process()
{
while(this->ProcessData)
{
std::unique_lock<std::mutex> lock(this->m);
while(!this->Processed)
this->c.wait(lock);
printf("\n%d", this->index);
fflush(stdout);
this->Processed = false;
this->m.unlock();
this->c.notify_one();
}
return;
}
我也尝试过这个 - &gt; c.wait(lock,[this] {return this-&gt; Processed;})。 结果是程序只显示数字48 [编辑显示的数字是48,而不是1],并且永远不会停止... 我究竟做错了什么? 这是我第一次真正使用condition_variable,但据我所知,c.notify_one()应允许第二个线程显示每次迭代的变量。
很抱歉,如果问题已经被问到,但我没有找到类似的东西。谢谢你的帮助。