[解決済み] 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 .
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] なぜvolatileはマルチスレッドのCやC++のプログラミングで有用ではないと考えられているのですか?