問題タブ [atomic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 64ビット書き込みがアトミックであることを保証する方法は?
Intel x86 ベースのプラットフォーム (特に、Intel コンパイラを使用して MacOSX 10.4 を実行している Intel ベースの Mac) で C でプログラミングする場合、64 ビット書き込みがアトミックであることが保証されるのはいつですか? 例えば:
y への最初の代入の実行が終了した後に別のスレッドが y の値を調べている場合、値 0xfedcba87654321 または値 0x12345678abcdef のいずれかが表示され、それらの混合ではないようにしたいと考えています。ロックせずに、可能であれば余分なコードなしでこれを行いたいと思います。私の希望は、64 ビット コードをサポートできるオペレーティング システム (MacOSX 10.4) で 64 ビット コンパイラ (64 ビット Intel コンパイラ) を使用する場合、これらの 64 ビット書き込みがアトミックになることです。これは常に真実ですか?
c++ - C++でスレッドセーフな参照カウントを実装する方法
C++プログラミング言語のX86CPUに、効率的でスレッドセーフな参照カウントシステムをどのように実装しますか?
私は常に、重要な操作がアトミックではなく、使用可能なX86インターロック操作が参照カウントシステムを実装するには不十分であるという問題に遭遇します。
次の記事ではこのトピックについて説明していますが、特別なCPU命令が必要です。
gcc - 32ビットモードでgccアトミック操作をコンパイルするときのリンクエラー
私は次のプログラムを持っています:
マルチCPU64ビットIntelマシンで実行されているLinuxでGCC4.2.2を使用してこのプログラムをコンパイルしています。
プログラムを64ビットモードでコンパイルすると、正常にコンパイルおよびリンクされます。
32ビットモードでコンパイルすると、次のエラーが発生します。
実際に32ビットプロセッサで実行することはありませんが、いくつかの32ビットライブラリとリンクできるように、32ビットの実行可能ファイルが必要です。
私の2つの質問は次のとおりです。
32ビットモードでコンパイルするとリンクエラーが発生するのはなぜですか?
32ビットライブラリとリンクしながら、プログラムをコンパイルしてリンクする方法はありますか?
c++ - Linux での連動機能
C++ Linux アプリで、Win32のインターロック機能が提供する機能を取得する最も簡単な方法は何ですか? 具体的には、32 ビットまたは 64 ビットの整数をアトミックにインクリメントまたは追加する軽量な方法はありますか?
multithreading - Compare And Swap (CAS) をサポートする CPU アーキテクチャはどれですか?
どの CPU アーキテクチャがアトミック プリミティブの比較とスワップをサポートしているか知りたいですか?
c++ - 高レベルの比較と交換 (CAS) 機能?
Compare And Swap (CAS) アトミック プリミティブに使用できる高レベル (インライン アセンブラではない C++) 関数またはマクロについて説明したいと思います...
たとえば、x86 の WIN32 には_InterlockedCompareExchange
、<_intrin.h>
ヘッダーに一連の関数があります。
multithreading - gccでのスレッドセーフなアトミック操作
私が取り組んでいるプログラムには、次のようなコードがたくさんあります。
真ん中の命令をアトミックストアに置き換えることができれば、これは明らかにCPUサイクルの無駄です。gccがこれを実行できることは知っていますが、このような単純なスレッドセーフなアトミック操作に関するドキュメントはあまり見つかりませんでした。このコードセットをアトミック操作に置き換えるにはどうすればよいですか?
(単純なストアは理論的にはアトミックである必要があることはわかっていますが、オプティマイザーがプロセスのある時点でアトミック性を台無しにしないことを期待する必要はありません。)
明確化:厳密にアトミックである必要はありません。これらの変数は、スレッドの同期にのみ使用されます。つまり、スレッドBは値を読み取り、その値が正しいかどうかを確認し、正しくない場合はスリープします。したがって、スレッドAが値を更新し、スレッドBがその更新を認識しない場合でも、問題はありません。これは、スレッドBが実際には必要のないときにスリープし、ウェイクアップすると値がスリープすることを意味するためです。正しいこと。
.net - IEditableObject.EndEditをアトミックにするにはどうすればよいですか?
IEditableObjectを実装するAddressクラスがある場合、次のようなEndEdit実装がある可能性があります。
_cityに例外がある場合は、_line1、_line2、および場合によっては_cityを元に戻す必要があります。この問題はEndEditに限定されるものではなく、おそらく他の場所でも見られます。
.net - IEditableObject.EndEdit をアトミックにするにはどうすればよいですか?
IEditableObject を実装する Address オブジェクトがある場合、EndEdit の実装は次のようになります。
たとえば、 _stateの更新で例外が発生した場合は、5 つのプロパティすべてをリセットする必要があります。このアトミック アップデートの問題は、おそらく EndEdit に限定されたものではありません。
java - 複数の行をアトミックに更新する
ResultSet
選択を実行してから、アトミックな方法でいくつかの行を更新する必要があります。
私が使用しているコードは次のようになります(簡略化):
- 更新がアトミックに実行されることを保証できますか? そうでない場合、どうすればそれを保証できますか?
- を介して更新しているデータベース行を他のプロセスが変更した場合はどうなります
updateRow()
か? の行をロックする方法はありますResultSet
か?