【发布时间】:2015-02-03 05:53:06
【问题描述】:
谁能指出我做错了什么?
我希望 foo 和 bar 交替打印。
有时它会在第一次迭代中挂起,在某些情况下会持续一段时间然后停止。
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex m;
std::condition_variable cv;
void foo()
{
while(true)
{
std::unique_lock<std::mutex> ul(m);
cv.wait(ul);
std::cout<<"bar"<<std::endl;
ul.unlock();
cv.notify_one();
}
}
int main()
{
std::thread t(foo);
while(true)
{
std::cout<<"foo"<<std::endl;
cv.notify_one();
std::unique_lock<std::mutex> ul(m);
cv.wait(ul);
}
}
【问题讨论】:
-
你忘记了实际的通信!你有一个互斥体,但它不能保护任何东西!
标签: c++ multithreading c++11 mutex deadlock