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?
Nein, es ist nicht sicher, es wegzulassen. Die Cache-Kohärenz macht keine atomaren Anweisungen. – Jester
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. –