1. ホーム
  2. c++

[解決済み] C++のint型への読み書きはアトミックか?

2023-04-17 21:56:33

質問

2つのスレッドがあり、1つはintを更新し、もう1つはそれを読んでいます。これは統計値であり、読み込みと書き込みの順序は関係ありません。

私の質問は、とにかくこのマルチバイト値へのアクセスを同期させる必要があるかということです。 あるいは、別の言い方をすれば、書き込みの一部が完了し、中断され、その後、読み取りが行われることがあります。

たとえば、0x0000FFFF という値を 0x00010000 というインクリメント値で取得することを考えてみてください。

値が 0x0001FFFF のように見えるとき、心配する必要があるのでしょうか? 確かに、型が大きければ大きいほど、このようなことが起こる可能性は高くなります。

私は常にこれらのタイプのアクセスを同期させていますが、コミュニティが何を考えているのか知りたかったのです。

どのように解決するのですか?

最初は、ネイティブのマシン サイズの読み取りと書き込みはアトミックだと思うかもしれませんが、プロセッサ/コア間のキャッシュ コヒーレンシを含め、対処すべき多くの問題があります。 WindowsではInterlocked*、Linuxではそれに相当するようなアトミックな操作を使用します。 C++0xには、これらをうまくクロスプラットフォームなインターフェイスでラップするための"atomic"テンプレートが用意される予定です。 今のところ、プラットフォームの抽象化レイヤーを使用している場合、これらの関数が提供される可能性があります。 ACE は提供していますが、クラステンプレート ACE_Atomic_Op .