質問

は、次のリソースによると、C ++(特別のVisual C ++)で静的変数の初期化はスレッドセーフではありませんスコープ。しかし、グローバル静的変数は安全です。

mutex化ですか

なし

スレッドセーフな静的変数

http://blogs.msdn.com/oldnewthing/アーカイブ/ 2004/03/08 / 85901.aspxする

だから、静的メンバ変数をスレッドセーフ?

と次のコードであります
class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

事前に感謝します!

役に立ちましたか?

解決

これ以上のすべての静的変数の他の種類ではなく、スコープの対グローバル対関数スコープの静的変数の問題だ。

唯一のアクティブなスレッドがあるが

すべての非関数スコープの静的変数は、main()の前に構成されています。関数スコープの静的変数は、それを含む関数が呼び出された最初の時間を構築しています。標準では、関数が複数のスレッドで呼び出されたとき、関数レベルの静力学が構築されているかの質問に沈黙しています。ただし、すべての実装は私が保証スレッドの安全性への用途で(2回-確認フラグ付き)コンストラクタの周りにロックを働いてきます。

他のヒント

はい(*)。グローバル静が初期化されている場合は、そこの周りに1つのスレッドのみで、すべてのコンストラクタは、それに呼ばれています。これはしかし、関数の静的には当てはまりません。

(*)一つは、おそらく世界的な静は、スレッドセーフではありませんコンストラクタのいくつかのスレッドを作成し、これらのスレッドにいくつかの初期段階のスケジュールを設定することによって行うことができます。この場合、通常のスレッドの安全規則が適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top