Linuxについて学ぶためにこのリンクを読んでいます。futex
ここで、私には理解できないことがあります。
ロックを取得するために、アトミック テスト アンド セット命令 (cmpxchg() など) を使用して 0 をテストし、1 に設定することができます。この場合、ロック スレッドはカーネルを使用せずにロックを取得します (およびカーネルは、この futex が存在することを知りません)。次のスレッドがロックを取得しようとすると、ゼロのテストが失敗し、カーネルが関与する必要があります。
「カーネルを介さずにロックを取得する」理由がよくわかりません。
test-and-set
などのアトミックな命令には、常にカーネルが関与していると常に考えています。
では、なぜ最初にロックを取得するときにカーネルが関与しないのでしょうか? より具体的には、アトミック命令はカーネルを含む必要があるか、または含む可能性がありますか?