我有一个非常简单的C++ produer消费者线程的代码,但我打印的“Hello World”C++简单的消费生产者问题
我想要什么下面的代码打印是这样的:
“HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld”
condition_variable mcond; // the variable communicating events
mutex mmutex; // the locking mechanism
void hello()
{
while (true) {
unique_lock<mutex> lck{ mmutex }; // acquire mmutex
mcond.wait(lck); /* do nothing */; // release lck and wait;
// re-acquire lck upon wakeup
cout << "Hello";
lck.unlock();
}
}
void world()
{
while (true)
{
unique_lock<mutex> lck{ mmutex }; // protect operations
cout << "World";
mcond.notify_one();
}
}
int main()
{
thread t1{ hello };
thread t2{ world };
t1.join();
t2.join();
return 0;
}
上面的代码是什么是印刷是这样的:
“WorldWorldWorldWorldWorldWorldWorldWorldWorld 你好 WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorld 你好 WorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldWorldHelloWorldWorldWorldWorldWorld”
我怀疑它不是在同步打印的原因是因为世界()函数释放锁,并立即再次抓住它在hello()之前有机会抓住它。
我不知道如何解决这个问题。我如何正确设置线程同步?