0

それは静的メンバーを共有する範囲ですか?

4

3 に答える 3

2

はい、static保存期間は、問題の変数がプロセスの開始時に存在し、プロセスの終了前ではなく割り当てが解除されることを意味します。プロセスのすべてのスレッドで共有され、グローバル変数と同様に、アクセスするとスレッド間でデータ競合が発生する可能性があります。

C++11 では、新しいストレージ期間指定子が導入されましたthread_local。これを使用すると、個々のスレッドごとに変数のインスタンスが 1 つ存在することを意味します。スレッドの開始時に割り当てられます。

残念ながら、主要なコンパイラ (GCC、Clang、VC++) のいずれも、これを完全に実装していません。

于 2012-08-16T06:43:36.957 に答える
2

はい、クラスstaticメンバーはそのクラスのすべてのインスタンスで共有されます。publicprotectedまたはをマークすることで、スコープを制限できますprivate。複数のスレッドが同時にstaticメンバーにアクセス/変更する場合は、ミューテックスなどを介してこのアクセスを同期する必要があります。

于 2012-08-16T06:32:27.620 に答える
1

はい、スレッド化は静的ストレージに影響しません。staticメンバーはグローバルと考えることができます。したがって、 a の変更staticはスレッドセーフではありません。

于 2012-08-16T06:30:30.197 に答える