問題タブ [test-and-set]
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.
multithreading - test-and-set アトミック操作によるミューテックスの実装: 2 つ以上のスレッドで機能しますか?
テストとセットのアトミック操作に関するウィキペディアの記事を読んでいます。相互排除を実装する 1 つの方法は、テスト アンド セット ベースのロックを使用することです。
ただし、同じ記事によると、テスト アンド セット操作には有限のコンセンサス数があり、最大 2 つの同時プロセスの待機なしコンセンサス問題を解決できます。
では、テスト アンド セット操作に基づくミューテックスは 2 つのスレッドに対してのみ機能するのでしょうか? もしそうなら、「実際の」ミューテックスはどのように実装されていますか?
linux - アトミック命令はカーネルを含みますか
Linuxについて学ぶためにこのリンクを読んでいます。futex
ここで、私には理解できないことがあります。
ロックを取得するために、アトミック テスト アンド セット命令 (cmpxchg() など) を使用して 0 をテストし、1 に設定することができます。この場合、ロック スレッドはカーネルを使用せずにロックを取得します (およびカーネルは、この futex が存在することを知りません)。次のスレッドがロックを取得しようとすると、ゼロのテストが失敗し、カーネルが関与する必要があります。
「カーネルを介さずにロックを取得する」理由がよくわかりません。
test-and-set
などのアトミックな命令には、常にカーネルが関与していると常に考えています。
では、なぜ最初にロックを取得するときにカーネルが関与しないのでしょうか? より具体的には、アトミック命令はカーネルを含む必要があるか、または含む可能性がありますか?
assembly - TAS 命令 68000
M68000 アセンブリ プログラムで並行性を処理するには、TAS 命令がどのように機能するかを理解する必要があります。
マニュアル (例: http://68k.hax.com/TAS )からわかる理論的な説明はあまり気にしません。何よりも、いくつかの例を見たいと思います。