アトミック命令は、カーネルを伴いません

イヴ:

私は、この読んでいるリンクについて学ぶためfutexのLinuxのを。ここで私は理解していないことを何かがあります。

ロック、アトミックテスト・アンド・セット命令を取得するために、(例えばCMPXCHGなどを())0をテストするために使用することができ、この場合には1に設定、ロックスレッドがカーネルを伴うことなく、ロックを取得(及びカーネルは)このfutexには存在していることを認識できません。ロックを取得するときに次のスレッドの試み、ゼロのテストが失敗し、カーネルが関与する必要があります。

「カーネルを介さずにロックを取得し、」なぜ私はかなり理解していません。

私はいつもアトミック命令は、のようなことを考えているtest-and-set、常にカーネルを必要とします。

なぜロックを取得する第1の時間は、カーネルが関与しませんでしょうか?具体的には、アトミック命令は、カーネルを含むことができる必要がありますか?

デビッド・シュワルツ:

アトミック試験及び命令セットは、通常、ユーザ・コードによって実行される普通の命令です。これは、カーネルを必要としません。

Futexesは、高速パスでカーネルを伴うことなく、ロックおよびロック解除操作を実行するための効率的な方法を提供します。プロセスがスリープ状態にする必要がある場合ただし、(それができるようになりましロックを取得するが、できなかったため)、または起こさ(ロックの取得を待機するように)、その後、カーネルは、スケジューリング操作を実行するために関与していることがあります。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=7438&siteId=1