我需要實現一個有兩種方式的互斥體:1.保護跨多個類的資源,以及2.保護類中某個方法的資源插槽並且可以是可重入的。例如(僞C++):QMutex - 這是否意味着我需要一個全局互斥變量
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知道它是相同的資源的保護,對嗎?
至於A.aaa和B.bbb保護相同的資源,我認爲它不會工作,因爲QT/OS不知道它在相同的資源/互斥?這是否意味着變量互斥體需要是一個全局的,以便多個不相關的類可以安全地訪問它?
互斥鎖與受保護資源關聯,而不是訪問此資源的類。所以,在你的簡單情況下,當資源是全局變量時,互斥量也應該是全局變量。 –
操作系統不知道任何有關受保護的資源。在堆棧上創建的不與其他線程共享的互斥鎖不會保護任何內容。所有訪問globalvar的線程必須共享相同的互斥量實例。因此,互斥量應與要保護的數據處於相同的範圍。 –