等待C++ 11线程实际启动

Vio*_*ffe 6 c++ multithreading c++11

如何等到C++ 11线程创建后才开始?它似乎没有任何方法,不像其他一些线程库(如Qt)提供了一种特殊的方法来检查线程是否正在运行.

Pet*_*ker 12

语言定义要求在构造函数返回之前已启动新线程.形式上,那是[thread.thread.constr]/5:"构造函数的调用完成与f副本的调用开始同步."


小智 5

我不确定为什么你需要等到它首先启动,但如果你这样做,那么你必须使用互斥锁,条件和标志指示它是否已启动.在新创建的线程中,锁定互斥锁,将标志设置为"true"并通知条件变量上的服务员.在创建线程的代码中,锁定互斥锁,然后检查标志.如果标志是"true" - 你的线程被启动,如果它是"假",那么等待一个条件变量并重复一次唤醒.

  • @VioletGiraffe,如果没有,[你可能不喜欢运行时行为](http://stackoverflow.com/a/14625122/132382). (2认同)