2010-02-16 51 views
0

考慮:C++ G ++線程安全構造

class Foo { 
    Foo() {}; 
}; 

class Bar { 
    static int counter; 
    Bar() { ++counter; } 
} 

很顯然,富:: foo是線程安全的,而酒吧::酒吧是沒有的。

此外,很明顯,如果函數是以這種方式編寫的,以至於它不是線程安全的,那麼清楚地將它放在構造函數中會使該構造函數不是線程安全的。

但是,是否有額外的陷阱,我需要擔心構造函數?即一塊帶有互斥/鎖的代碼,如果它在函數體中,它將是線程安全的,但是如果我將它放在構造函數中,基於C++構造函數的複雜性,會發生奇怪的事情,並且它不再是線程安全的?

謝謝!

編輯:你可以假設我正在使用g ++。

回答

1

我會避免線程使用的對象中的任何靜態值。

爲什麼不傳入所需的值作爲構造函數的參數?或者實際上,在線程的構造函數週圍放置一個互斥鎖。我不會讓其他班對此負責。