私はこれを大まかにしたいです:
初期スレッド:
- 一部の値をグローバル変数に書き込みます(それらは二度と書き込まれません)
- これは、適度に大きなデータ(配列、文字列など)になる可能性があります。簡単には作れません
std::atomic<>
。
- これは、適度に大きなデータ(配列、文字列など)になる可能性があります。簡単には作れません
- 他のスレッドを生成する
その他のスレッド:
- グローバル状態を読み取る
- 仕事などをする
これで、引数をstd::thread
に渡すことができることがわかりましたが、この例を通してC ++のメモリ保証を理解しようとしています。
また、実際の実装では、スレッドを作成するとメモリバリアが発生し、その時点までに親スレッドが書き込んだすべてをスレッドが「確認」できることを確信しています。
しかし私の質問は、これは規格によって保証されていますか?
余談:ダミーstd::atomic<int>
などを追加して、他のスレッドを開始する前にそこに書き込んでから、他のスレッドで起動時に一度読み取ることができると思います。発生前のすべてのメカニズムにより、以前に作成されたグローバルな状態が適切に表示されることが保証されます。
しかし、私の質問は、そのようなものが技術的に必要かどうか、またはスレッドの作成で十分かどうかです。
@NathanOliver d'oh。コメントを削除しました。私の質問がどれほど愚かであっても、あなたがここで私を助けた頻度は数えられません...
—
idclev 463035818
@ idclev463035818ご心配なく。それは私たち全員に起こります。
—
NathanOliver
std::atomic<int>
ます...使用できますstd::atomic_thread_fence
。