2 Stimmen

Was ist der korrekte Weg, um zwei nicht signierte 32-Bit-Variablen (ULONG) atomar auszutauschen?

Ich habe die InterlockedExchange-Funktion gefunden, die es mir ermöglicht, zwei signierte 32-Bit-Variablen (LONG) auszutauschen.

Aber wie lautet der richtige Weg, um unter Windows zwei unsigned 32-Bit-Variablen (ULONG) atomar auszutauschen?

Ich sehe keinen offensichtlichen Weg, dies mit den von Microsoft bereitgestellten Funktionen zu tun.

(Unter Berücksichtigung, dass Microsoft mir auch sagt, dass das Ergebnis der Konvertierung von unsigned Integern in signed Integern in einigen Fällen implementierungsabhängig ist.)

2voto

Remy Lebeau Punkte 498719

Einfach einen Typ-Umwandlung verwenden:

ULONG Wert1, Wert2;
InterlockedExchange((LPLONG)&Wert2, (LONG)Wert1);

0voto

deviantfan Punkte 11318

In Ihrem Link wird erläutert, wie man eine ungleiche Sache in verschiedene Größen (und/oder Gleitkomma-Zahlen) umwandelt. Das Umwandeln zwischen Vorzeichen und ohne Vorzeichen des gleichen Typs sollte ohne Probleme möglich sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X