如何等到C ++ 11线程创建后启动?它似乎没有任何方法,不像其他一些线程库(如Qt)提供了一种特殊的方法来检查线程是否正在运行。
答案 0 :(得分:11)
语言定义要求在构造函数返回之前启动新线程。形式上,那是[thread.thread.constr] / 5:“构造函数的调用完成与f副本的调用开始同步。”
答案 1 :(得分:5)
我不确定为什么你需要等到它首先启动,但如果你这样做,那么你必须使用互斥锁,条件和标志指示它是否已启动。在新创建的线程中,锁定互斥锁,将标志设置为“true”并通知条件变量上的服务员。在创建线程的代码中,锁定互斥锁,然后检查标志。如果标志是“true” - 你的线程被启动,如果它是“假”,那么等待一个条件变量并重复一次唤醒。