Heim > Backend-Entwicklung > C++ > Hauptteil

Hält der „Sperr'-Befehl in der x86-Assembly den Bus auf unbestimmte Zeit?

Mary-Kate Olsen
Freigeben: 2024-10-28 21:06:31
Original
187 Leute haben es durchsucht

 Does the

Verstehen der „Lock“-Anweisung in der x86-Assembly

Die „Lock“-Anweisung in der x86-Assembly ist ein Präfix, das den ausschließlichen Besitz des Busses für die nachfolgende Anweisung erzwingt. Dadurch wird sichergestellt, dass die CPU für die Dauer dieser Anweisung die vollständige Kontrolle über die Cache-Zeile hat.

Deaktivierung der Bussperre

Entgegen der allgemeinen Auffassung führt das Präfix „lock“ nicht dazu, dass die CPU gesperrt wird den Bus auf unbestimmte Zeit. Die Sperre wird nach der Ausführung der nachfolgenden Anweisung aufgehoben. Dadurch kann die CPU die optimale Leistung aufrechterhalten, indem sie den Bus nur dann sperrt, wenn dies unbedingt erforderlich ist.

Implementierung der Addition mit „Lock“

Der von Ihnen bereitgestellte Codeausschnitt implementiert ein atomares Inkrement eines langen Wortes bei ein Speicherort, der durch den Wert im ECX-Register angegeben wird:

  1. movl 4(%esp), �x: Kopiert die Adresse der Variablen, die inkrementiert werden soll, in das ECX-Register.
  2. incl (�x): Erhöht atomar das Langwort an der im ecx-Register gespeicherten Adresse.
  3. mov $0,�x: Setzt das eax-Register auf 0.
  4. setne %al: Setzt den Wert des Al-Registers auf 1, wenn der neue Wert der Variablen nicht gleich 0 ist (was anzeigt, dass die Inkrementierungsoperation erfolgreich war).

Das Ergebnis ist, dass die Variable atomar um erhöht wird 1, und das EAX-Register wird auf 0 gesetzt, wenn der neue Wert 0 ist, andernfalls 1. Beachten Sie, dass es sich bei diesem Vorgang um ein Inkrement und nicht um eine Addition handelt.

Das obige ist der detaillierte Inhalt vonHält der „Sperr'-Befehl in der x86-Assembly den Bus auf unbestimmte Zeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!