【发布时间】:2014-07-06 13:01:48
【问题描述】:
我在 Ubuntu 13.04 桌面上运行这个非常简单的程序,但是如果我注释掉 sleep_for 行,它会在从 main 打印 cout 后挂起。谁能解释为什么?据我了解, main 是一个线程, t 是另一个线程,在这种情况下,互斥锁管理共享 cout 对象的同步。
#include <thread>
#include <iostream>
#include <mutex>
using namespace std;
std::mutex mu;
void show()
{
std::lock_guard<mutex> locker(mu);
cout<<"this is from inside the thread"<<endl;
}
int main()
{
std::thread t(show);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::lock_guard<mutex> locker(mu);
cout<<"This is from inside the main"<<endl;
t.join();
return 0;
}
【问题讨论】:
-
这是一个常见的代码质量要求的原因,即任何析构函数具有副作用的对象都应在作用域的开头创建,除非有充分的理由不这样做。
标签: multithreading c++11