std :: mutex :: lock阻止CPU使用率

时间:2014-03-15 03:12:37

标签: c++ multithreading c++11

我希望能够随意冻结和解冻线程 我目前的解决方案是通过回调和忙着等待睡眠来完成的。 这显然不是最佳解决方案。

我正在考虑让主线程锁定互斥锁,然后让从属线程运行一个锁定和解锁相同互斥锁的功能。
我担心的是,如果这是一个真正繁忙的等待,可能的CPU使用率 我的问题是:C ++ 11中的STL如何指定“阻塞”,如果是忙碌的等待,是否有较少的CPU密集型解决方案(例如pthreads)?

2 个答案:

答案 0 :(得分:1)

看一下这个答案:Multithreading, when to yield versus sleep。锁定互斥锁(以你所描述的方式)是解决问题的合理方法。

Here's an MSDN article值得一读。引用:

  

在被挂起或阻塞的线程准备好运行之前,   调度程序不会为它们分配任何处理器时间,无论如何   他们的优先事项。

如果某个帖子没有被安排,那么它就没有被运行。

答案 1 :(得分:0)

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

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