吸气剂设定器中的互斥体

时间:2011-09-16 00:27:21

标签: c++ qt

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

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

由于

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

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