2015-08-03 56 views
0

我有下面的類易失性和互斥用於幀間螺紋通信

class Thread 
{ 
    int m_state; 
    Mutex m; 
    CondVar v; 

    Thread(): m_state(0) {} 

    write() 
    { 
    // Get mutex m 
    // m_state = 1; 
    // signal v 
    }; 

    read() 
    { 
     // Get mutex m 
     while(m_state == 0) 
     { 
     wait v; 
     }; 
    }; 
}; 

read()和寫()可以在單獨的線程中調用。

在這種情況下,我們是否必須使m_state或volatile或編譯器確保優化(例如從存儲器讀取m_state以註冊和旋轉寄存器)被阻止?

+0

這對於優化是安全的。 – nwp

+0

這不是'volatile'的意思。 – Jarod42

回答

0

揮發性不會在這裏幫助,因爲是兩個方面的問題:

  1. 編譯器優化讀/寫操作(可以通過編譯器進行管理,部分
  2. 內部CPU指令重新排序(可以」由編譯器管理

所以你必須標記共享變量至少有內存障礙,以防止重新排序。 Mutex將適合這裏(不是最高的性能,但它會工作)。此外,你可以嘗試任何可用的讀寫器鎖,因爲它應該適合你的語義100%。