グローバル変数が同時にアクセスされるシナリオ異なるコア上に複数のスレッドがある場合、アトミックおよび揮発性を使用することの影響を考慮することが重要です。 variables.
Volatile キーワード
volatile キーワードを使用すると、コンパイラが変数のメモリ操作を最適化せず、プロセッサが常にメモリから値を直接読み取るようになります。ただし、volatile は直接メモリ アクセスを保証しますが、アトミック アクセスを意味するものではありません。
アトミック データ型
標準 C 11 には、 として示されるアトミック データ型が含まれています。 。これらの型はアトミック操作を提供します。つまり、各操作は他のスレッドからの干渉なしに実行されることが保証されます。これにより、キャッシュの不整合に関係なく、常に最新の値が読み取られることが保証されます。
追加の同期 (ロックなど) がない場合、共有グローバル変数は可視性と順序付けを示します。操作で使用されるメモリ順序付けパラメータによって決定される制約。デフォルトの順序付け () は単一の合計順序を確立しますが、古い値が依然として観察される可能性があります。
ただし、読み取り、変更、書き込み操作 ( など) では、操作が確実に行われることが保証されます。常に最新の値に対して実行されます。これにより、同じ変数に対する連続した読み取り、変更、書き込み操作によって、一意の順序付けられた値のシーケンスが返されることが保証されます。
揮発性変数は直接メモリ アクセスを保証しますが、アトミックを保証するものではありません。操作。共有変数への信頼性の高い同時アクセスを実現するには、プログラムの正しい動作を保証するために、アトミック データ型 () を適切な同期プリミティブと組み合わせて使用する必要があります。
以上がC 11 同時実行性: アトミック変数と揮発性変数のどちらを使用する必要があるか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。