QMutex - 这是否意味着我需要一个全局互斥变量

时间:2013-10-03 06:10:11

标签: qt qtcore qmutex

我需要实现一种以两种方式工作的互斥锁:1。保护资源不受多个类的影响,以及2.保护资源免受类槽中方法的影响,并且可能是可重入的。例如(伪C ++):

Class A {
  function aaa() {
    QMutex mutex;
    mutex.lock();
    globalvar++;
    mutex.unlock()
  }
}

Class B {
  function bbb() {
    QMutex mutex;
    mutex.lock();
    globalvar++;
    mutex.unlock()
  }
}
  1. 我读了this posting,其中说情景2已被覆盖,因为A.aaa被A.aaa打断了处理(不知何故Qt / OS知道它是受保护的同一资源。对吗?< / p>

  2. 至于A.aaa和B.bbb保护相同的资源,我认为它不起作用,因为Qt / OS不知道它的资源/互斥量是一样的吗?这是否意味着变量互斥量需要是全局的,以便多个不相关的类可以安全地访问它?

1 个答案:

答案 0 :(得分:1)

  

我读了这篇帖子,其中表示情景2已被覆盖,因为A.aaa被A.aaa打断了处理(不知何故Qt / OS知道它是受保护的同一资源。对吗?

是的,虽然看起来你应该在锁定与范围绑定的情况下使用QMutexLocker,以避免忘记解锁的错误。这在C ++中称为RAII

严格来说,QMutex负责锁定资源。

  

至于A.aaa和B.bbb保护相同的资源,我认为它不起作用,因为Qt / OS不知道它的资源/互斥量是一样的吗?这是否意味着变量互斥量需要是全局的,以便多个不相关的类可以安全地访问它?

这是一种罕见的情况,但是是的。虽然您可能希望将全局变量包装到类型中,例如自定义结构。