2

我需要实现一个以两种方式工作的互斥锁: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. 我读了这篇文章,上面说场景 2 被覆盖,因为 A.aaa 被 A.aaa 中断处理(不知何故 Qt/OS 知道它是被保护的同一个资源。对吧?

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

4

1 回答 1

1

我读了这篇文章,上面说场景 2 被覆盖,因为 A.aaa 被 A.aaa 中断处理(不知何故 Qt/OS 知道它是被保护的同一个资源。对吧?

是的,尽管在锁定与作用域相关联的这种情况下,您似乎应该使用 QMutexLocker 以避免忘记解锁的错误。这在 C++中称为RAII 。

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

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

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

于 2013-10-03T07:36:29.210 回答