6

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

4

2 回答 2

12

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

于 2013-08-14T21:19:27.537 回答
6

我不确定你为什么需要首先等待它启动,但如果你这样做,那么你必须使用互斥锁、条件和指示它是否启动的标志。在新创建的线程中,锁定互斥体,将标志设置为«true»,并在条件变量上通知服务员。在创建线程的代码中,锁定互斥体并检查标志。如果标志为“true” - 您的线程已启动,如果为“false”,则等待条件变量并在唤醒后重复。

于 2013-08-14T20:21:10.787 回答