「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > x86 アセンブリの「ロック」命令はバスを無期限に保持しますか?

x86 アセンブリの「ロック」命令はバスを無期限に保持しますか?

2024 年 11 月 8 日に公開
ブラウズ:991

 Does the \

x86 アセンブリの「ロック」命令について理解する

x86 アセンブリの「ロック」命令は、後続の命令に対してバスの排他的所有権を強制するプレフィックスです。これにより、CPU がその命令の継続時間中にキャッシュ ラインを完全に制御できるようになります。

バス ロックの非アクティブ化

一般的な理解に反して、「lock」プレフィックスによって CPU がロックされるわけではありません。バスは無限に。ロックは後続の命令の実行後に解放されます。これにより、絶対に必要な場合にのみバスをロックすることで、CPU が最適なパフォーマンスを維持できるようになります。

「Lock」を使用した加算の実装

指定したコード スニペットは、ロング ワードのアトミック インクリメントを実装します。 ecx レジスタの値で指定されたメモリ位置:

  1. movl 4(%esp), �x: のアドレスをコピーします。 ecx レジスタにインクリメントされる変数。
  2. incl (�x): ecx レジスタに格納されているアドレスのロングワードを原子的にインクリメントします。
  3. mov $0,�x: eax レジスタを 0.
  4. setne %al: 変数の新しい値が 0 に等しくない場合、al レジスタの値を 1 に設定します。 (インクリメント操作が成功したことを示します)。

その結果、変数はアトミックに 1 ずつインクリメントされ、新しい値が 0 の場合は eax レジスタが 0 に設定され、それ以外の場合は 1 に設定されます。この操作は加算ではなく増分であることに注意してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3