Wie verwende ich die SPERRE ASM-Präfix zu Lesen einen Wert?
Ich weiß, wie Sie SPERREN, um thread-sicher Inkrement-Wert:
lock inc [J];
Aber wie ich Lesen Sie [J] (oder einen beliebigen Wert) in eine thread-sichere Weise? Das LOCK-Präfix kann nicht mit mov. Und wenn ich den folgenden Code:
xor eax, eax;
lock add eax, [J];
mov [JC], eax;
Wirft es einen Fehler auf der Linie 2.
- Was ist es, was versuchst du hier zu erreichen?
- Alles was ich will zu tun ist, Lesen Sie [J], die in einer thread-sicheren Weise.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden XADD - oder MOV-Anweisung statt ADD-Anweisung!
Siehe auch MFENCE, LFENCE und SFENCE Anweisungen!
BEARBEITEN:
Sie können nicht verwenden Sie LOCK-Anweisung mit der ADD-Anweisung, wenn-source-operand ein Speicher-operand!
Aus: "die Intel® 64 und IA-32-ArchitecturesSoftware Developer 's Manual"
EDIT2:
Form: "die Intel® 64 und IA-32-ArchitecturesSoftware Developer 's Manual, Volume3A"
So, zum Lesen ich prefare zu verwenden CMPXCHG Unterricht mit LOCK-Präfix, wie:
Für das schreiben:
.