Okay, ich frage das Gleiche wie this deleted question, aber ich frage es direkter.Wie kann ich zwei Zeiger unter Windows atomar vertauschen?
Ich habe zwei Zeigervariablen in zwei Instanzen der gleichen Klasse. Ich würde gerne den Inhalt dieser Variablen (nicht was sie angeben, sondern nur die Variablen selbst) atomar vertauschen.
Ich würde gerne Schlösser zu vermeiden, wenn überhaupt möglich.
Wie mache ich das?
EDIT: Um die drei Zillion "InterlockedExchangePointer" Antworten, lesen Sie bitte zuerst die MSDN docs. InterlockedExchangePointer tauscht den Wert eines Zeigerziels mit einem Wert auf dem Stapelregister aus. Es (selbst) tauscht nicht zwei Zeiger in Speicherorten aus.
Ich glaube nicht, dass es eine nicht-locking X86-Anweisung gibt, um den Inhalt von zwei Speicheradressen zu tauschen. Ohne CPU-Unterstützung wäre es schwierig, eine solche Funktion zu implementieren. Gibt es Garantien für die Hinweise? (ZB sind sie immer im Speicher benachbart? Wenn ja, könnten Sie einen 8-Byte- oder 16-Byte-Vergleich/Austausch in einer Schleife verwenden.) –
@James: Da Sie das Gleiche über jeden Kommentar gepostet haben: 'int * p1 = ein Wert; int * p2 = irgendein anderer Wert; p2 = InterlockedExchangePointer (p1, p2); würde genau das tun. Obwohl darunter ein kritischer Abschnitt verwendet wird, bin ich mir nicht sicher, ob es mit der Notwendigkeit, Sperren vollständig zu vermeiden, übereinstimmt. –
wow, viele Leute geben die falsche Antwort ...das sollte eine Interviewfrage sein ':-)' – rubenvb