2012-09-07 118 views
1

我有以下代碼C++僞代碼同步靜態的對象

class A 
{ 
private: 
B s_staticvar; 

public: 
static void doSomething() 
{ 
} 
} 

甲數量的線程可以調用的doSomething()。所有線程只讀s_staticvar &不修改它們。 我的問題是我們必須鎖定靜態無功讀它之前?

能非原子對象B的讀取會導致同步的問題?

回答

4

您可以安全地讀取從多個線程的數據。不需要鎖定。這些線程甚至不會注意到彼此。只有你需要確保你完全準備好您的變量之前,其他線程一命嗚呼。

在多核/多處理器環境中可能會發生數據的多個副本會出現在不同的處理器的高速緩存。這隻要它們都同樣是沒有問題的。