首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::mutex::锁阻塞CPU使用

std::mutex::锁阻塞CPU使用
EN

Stack Overflow用户
提问于 2014-03-15 03:12:37
回答 2查看 3.2K关注 0票数 3

我希望能够随意冻结和解冻一条线。

我目前的解决方案是通过回调和忙着等待睡眠来完成的。这显然不是一个最佳的解决办法。

我正在考虑让主线程锁一个互斥锁,然后让从线程运行一个锁和解锁同一个互斥锁的函数。

我担心的是,如果这是一个真正繁忙的等待,那么它可能会占用CPU。

因此,我的问题是: C++11中的STL是如何指定“阻塞”的,如果是繁忙的等待,是否有较少的CPU密集型解决方案(例如线程)?

EN

回答 2

Stack Overflow用户

发布于 2018-06-18 14:36:54

虽然互斥可以使用,但它不是一个最佳解决方案,因为互斥应该用于资源保护(另见本q/a)。通常,std::condition_variable实例是您应该寻找的对象。它的工作如下:

  1. 创建一个std::condition_variable实例,并将其分发给控制线程和受控线程。
  2. 在受控线程中,创建一个std::unique_lock。将其传递给条件变量的wait方法之一
  3. 在控制线程中,调用条件变量上的一个notify方法。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2014-03-15 03:20:41

看看这个答案:多线程,何时屈服与睡眠。锁定互斥锁(以您所描述的方式)是解决问题的合理方法。

这是一篇MSDN文章,值得一读。引用:

在暂停或阻塞的线程准备好运行之前,调度程序不会为它们分配任何处理器时间,而不管它们的优先级如何。

如果线程没有被调度,那么它就不会运行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22419068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档