ホームページ  >  記事  >  バックエンド開発  >  x86 アセンブリの「ロック」命令はバスを無期限に保持しますか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 21:06:31188ブラウズ

 Does the

x86 アセンブリの「ロック」命令を理解する

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

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

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

「ロック」を使用した加算の実装

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

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

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

以上がx86 アセンブリの「ロック」命令はバスを無期限に保持しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。