我希望能够随意冻结和解冻一条线。
我目前的解决方案是通过回调和忙着等待睡眠来完成的。这显然不是一个最佳的解决办法。
我正在考虑让主线程锁一个互斥锁,然后让从线程运行一个锁和解锁同一个互斥锁的函数。
我担心的是,如果这是一个真正繁忙的等待,那么它可能会占用CPU。
因此,我的问题是: C++11中的STL是如何指定“阻塞”的,如果是繁忙的等待,是否有较少的CPU密集型解决方案(例如线程)?
发布于 2018-06-18 14:36:54
虽然互斥可以使用,但它不是一个最佳解决方案,因为互斥应该用于资源保护(另见本q/a)。通常,std::condition_variable
实例是您应该寻找的对象。它的工作如下:
std::condition_variable
实例,并将其分发给控制线程和受控线程。std::unique_lock
。将其传递给条件变量的wait
方法之一notify
方法。希望这能有所帮助。
发布于 2014-03-15 03:20:41
看看这个答案:多线程,何时屈服与睡眠。锁定互斥锁(以您所描述的方式)是解决问题的合理方法。
这是一篇MSDN文章,值得一读。引用:
在暂停或阻塞的线程准备好运行之前,调度程序不会为它们分配任何处理器时间,而不管它们的优先级如何。
如果线程没有被调度,那么它就不会运行。
https://stackoverflow.com/questions/22419068
复制相似问题