【问题标题】:Mutex in getter settergetter setter 中的互斥锁
【发布时间】:2011-09-16 00:27:21
【问题描述】:

我想知道如何将互斥锁用于多线程应用程序。我的吸气剂也需要锁定吗?我找到了this 的帖子。答案是肯定的,我需要保护 getters 函数 但这意味着我将能够一次读取一次,我想知道它是否可以改进。

T.E.D's answer 建议您可以实现锁的方式,如果 setter 的函数没有锁定互斥锁以执行写入,则许多线程可以同时读取数据。 我试图找到一些例子——阅读 Qt 的文档——tought,QMutex 没有 isLocked() 函数或类似的东西。那么如何实际实现这种“智能锁”呢。

谢谢

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    您需要一种称为readers-writer lock 的特殊锁定机制。有了这个锁,任何数量的读者都可以同时访问资源,但是要让一个作家能够访问,所有的读者线程都必须阻塞。

    看起来 Qt 有一个 QReadWriteLock 类来实现这个机制。

    【讨论】:

    • 好吧,看来我搜索得不够好。谢谢!
    • 请阅读thread关于读写器互斥锁
    【解决方案2】:

    是的,您需要同步对 getter 的访问,而不是将它们锁定,因为它们不会修改任何内容,而是隐式放置 memory barrier。因此,多线程操作将按正确顺序排列,您的 getter 将不会读取部分修改的数据。

    您不需要任何智能锁,因为读写器互斥won't provide you any benefit

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-20
      • 2014-05-24
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2012-06-05
      • 2010-09-16
      • 2010-12-17
      相关资源
      最近更新 更多