ローカル配列およびスレッドとの相互作用のための C++98 および C++11 メモリ モデルは何ですか?
グローバル変数と静的変数に関連するC++11 のthread_localキーワードについては言及していません。
代わりに、コンパイル時に割り当てられる配列のスレッドの保証された動作は何かを調べたいと思います。コンパイル時とは、「int array[100]」を意味します。これは、new[]キーワードを使用した割り当てとは異なります。静的変数という意味ではありません。
たとえば、次の構造体/クラスがあるとします。
struct xyz { int array[100]; };
および次の関数:
void fn(int x) {
xyz dog;
for(int i=0; i<100; ++i) { dog.array[i] = x; }
// do something else with dog.array, eg. call another function with dog as parameter
}
複数のスレッドからfn()を呼び出しても安全ですか? C++ のメモリ モデルは、すべてのローカルの非静的変数と配列がスタックに割り当てられ、各スレッドが独自のスタックを持っているようです。これは本当ですか (つまり、これは公式に標準の一部ですか)?