我希望能够随意冻结和解冻线程 我目前的解决方案是通过回调和忙着等待睡眠来完成的。 这显然不是最佳解决方案。
我正在考虑让主线程锁定互斥锁,然后让从属线程运行一个锁定和解锁相同互斥锁的功能。
我担心的是,如果这是一个真正繁忙的等待,可能的CPU使用率
我的问题是:C ++ 11中的STL如何指定“阻塞”,如果是忙碌的等待,是否有较少的CPU密集型解决方案(例如pthreads)?
答案 0 :(得分:1)
看一下这个答案:Multithreading, when to yield versus sleep。锁定互斥锁(以你所描述的方式)是解决问题的合理方法。
Here's an MSDN article值得一读。引用:
在被挂起或阻塞的线程准备好运行之前, 调度程序不会为它们分配任何处理器时间,无论如何 他们的优先事项。
如果某个帖子没有被安排,那么它就没有被运行。
答案 1 :(得分:0)
虽然可以使用互斥锁,但它不是最佳解决方案,因为互斥锁应该用于资源保护(see also this q/a)。
通常,std::condition_variable
个实例是您应该寻找的。
它的工作原理如下:
std::condition_variable
的实例并将其分发给您的控制线程和受控线程std::unique_lock
。将其传递给条件变量wait
方法notify
方法。 希望有所帮助。