我需要实现一种以两种方式工作的互斥锁: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()
}
}
我读了this posting,其中说情景2已被覆盖,因为A.aaa被A.aaa打断了处理(不知何故Qt / OS知道它是受保护的同一资源。对吗?< / p>
至于A.aaa和B.bbb保护相同的资源,我认为它不起作用,因为Qt / OS不知道它的资源/互斥量是一样的吗?这是否意味着变量互斥量需要是全局的,以便多个不相关的类可以安全地访问它?
答案 0 :(得分:1)
我读了这篇帖子,其中表示情景2已被覆盖,因为A.aaa被A.aaa打断了处理(不知何故Qt / OS知道它是受保护的同一资源。对吗?
是的,虽然看起来你应该在锁定与范围绑定的情况下使用QMutexLocker,以避免忘记解锁的错误。这在C ++中称为RAII。
严格来说,QMutex负责锁定资源。
至于A.aaa和B.bbb保护相同的资源,我认为它不起作用,因为Qt / OS不知道它的资源/互斥量是一样的吗?这是否意味着变量互斥量需要是全局的,以便多个不相关的类可以安全地访问它?
这是一种罕见的情况,但是是的。虽然您可能希望将全局变量包装到类型中,例如自定义结构。