2016-03-25 17 views
1

Intel Handbuch sagt:Ist das Opcode-Präfix "lock" wegen des "Cachekohärenzmechanismus" nicht verwendbar?

8.1.4 Auswirkungen eines LOCK Betriebes am internen Prozessor-Caches
...
Der Cache-Kohärenzmechanismus automatisch verhindert, dass zwei oder mehr Prozessoren, die den gleichen Speicherbereich zwischengespeichert werden aus Gleichzeitiges Ändern der Daten in diesem Bereich.

Bedeutet das, dass lock Opcode-Präfix für die Anwendungsprogrammierung nutzlos ist?

Der CPU-Cache ist immer eingeschaltet, und der gesamte für Anwendungen zugängliche Speicher kann im Cache zwischengespeichert werden. Daher ist der Cache-Kohärenzmechanismus immer auf dem neuesten Stand, um die Integrität Ihrer im Shared Memory gespeicherten Daten zu schützen.

"Cache-Kohärenz-Mechanismus" ist ein inhärenter Teil des Multi-Core-CPU-Cache, es funktioniert immer unabhängig davon, ob Sie lock Präfix verwenden oder nicht.

Ausführlichere Frage:
Ich habe Core2Duo CPU, und mein Anwendungsprogramm läuft in 2 parallelen Threads arbeiten mit gemeinsamen globalen Variablen.
Ist es sicher für mich, lock Präfix in Anweisungen wie lock add [ESI],EAX und lock cmpxchg8b [ESI] zu überspringen?

+3

Nein, es ist nicht sicher, es wegzulassen. Die Cache-Kohärenz macht keine atomaren Anweisungen. – Jester

+1

Der Kohärenzmechanismus verhindert nur die Möglichkeit, dass die L1 des Kerns A eine zwischengespeicherte Kopie einer Cache-Zeile mit unterschiedlichen Daten von beispielsweise L1 des Kerns B aufweist. Um Ross 'Antwort hinzuzufügen, beachten Sie, dass "add [esi], eax" eigentlich ein Laden, Hinzufügen und Speichern ist. –

Antwort

6

Nein, ohne das Präfix LOCK wird die Cache-Sperre nicht über die gesamte Lese-/Modifizierungs-/Schreiboperation hinweg beibehalten. Dies bedeutet, dass die Operation für andere Prozessoren nicht als atomar erscheint. Das LOCK-Präfix erzwingt auch eine strikte Speicherordnung, und nicht die etwas lockere Speicherordnung, die normalerweise verwendet wird.