[英]std::mutex::lock blocking CPU usage
我希望能够随意冻结和解冻线程。
我当前的解决方案是通过回调和忙于睡眠的方式完成的。 这显然不是最佳解决方案。
我正在考虑让主线程锁定一个互斥锁,然后让从线程运行一个锁定和解锁相同互斥锁的函数。
我担心的是,如果这是真正的繁忙等待,可能会占用CPU。
因此,我的问题是:C ++ 11中的STL如何指定“阻塞”?如果等待很忙,是否有较少的CPU密集型解决方案(例如pthread)?
看一下这个答案: 多线程,何时屈服与睡眠 。 锁定互斥锁(按照您描述的方式)是解决问题的合理方法。
这是一篇MSDN文章 ,值得一读。 引用:
在挂起或阻塞的线程准备好运行之前,调度程序不会为它们分配任何处理器时间,无论它们的优先级如何。
如果未计划线程,则不会运行该线程。
尽管可以使用互斥锁,但这并不是最佳解决方案,因为应该将互斥锁用于资源保护(另请参见此q / a) 。 通常,您应该寻找std::condition_variable
实例。 其工作方式如下:
std::condition_variable
实例并将其分发到您的控制线程和受控线程 std::unique_lock
。 将其传递给条件变量的wait
方法之一 notify
方法之一。 希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.