首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >适用于工人线的“栅栏”线

适用于工人线的“栅栏”线
EN

Stack Overflow用户
提问于 2015-07-13 15:35:38
回答 1查看 69关注 0票数 2

我有一个工作类,它运行自己的thread并行地执行一些工作。在特定的空隙中,我希望它是空闲的。我有个接口

代码语言:javascript
复制
class Worker
{
    mutex m_wait;

    void pause() {
        m_wait.lock();
    }

    void continue() {
        m_wait.unlock();
    }

    static doWork(mutex& lock) {
        while(true) {
            {
                lock_guard _l(lock);
                // Lock and immidiatly unlock again
            }
            // Only *some* work
        }
    }
};

如您所见,doWork方法偶尔检查互斥锁(由pause()锁定),如果是,则不会继续。

我对这一实施的速度和备选方案有一些疑问:

  • 检查lock有多少开销?假设我在实际工作(小数据集)中做了一个10x10*10x10的矩阵乘法。然后
  • 有没有一种替代方案,可以达到同样的效果,但开销却较小?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-13 16:28:07

锁定/解锁互斥锁的成本取决于您的平台和特定的互斥实现。在最好的情况下,在没有争用的情况下,锁定/解锁互斥锁相当于两个互锁内存操作。

在发生争用锁定的情况下,由于大多数实现将发出内核调用以等待互斥锁的解锁,因此锁定将成为一项代价高昂的操作。但是,在这种情况下,您可能并不关心,因为首先要停止线程。

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

https://stackoverflow.com/questions/31387581

复制
相关文章

相似问题

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