InterlockedExchange für bool



  • Hallo,

    ich verwende derzeit InterlockedExchange um globale bool Variablen (multi)threadsafe zu schreiben. Diese sind in einer Struktur und als volatile deklariert. Jetzt habe ich aber bemerkt, dass mir InterlockedExchange mehr als nur eine bool Variable schreibt und die Nachfolgende überschreibt.
    Wie könnte ich jetzt eine Full-Memory-Barrier für meine bool Variablen verwirklichen (außer CriticalSections)?


  • Mod

    Interlocked arbeitet nicht azf bool sondern auf LONG*! Wie hast Du das denn auf ein bool angewendet? Burtal gecastet.

    Was stört Dich an einem LONG? Geht doch genauso.



  • InterlockedExchange ((LONG*) &LS.bSend, true);
    

    So z.B. 😃
    Klar könnte ich auch ein LONG nehmen, dann muss ich aber alles umschreiben, gibts es denn da nichts passendes?



  • du könntest eine union aus bool und LONG benutzten


  • Mod

    yogle schrieb:

    InterlockedExchange ((LONG*) &LS.bSend, true);
    

    So z.B. 😃
    Klar könnte ich auch ein LONG nehmen, dann muss ich aber alles umschreiben, gibts es denn da nichts passendes?

    Solche Holzhammer casts sind übel. Lass es bleiben.
    Ich habe noch nie verstanden, dass casts an solchen Stellen so verwendet werden.
    Nimm zukünftig c++ Casts. und meide reinterpret_cast, dann wirst Du vom Compiler auf diese gefährlichen casts hingewiesen und Du kannst solche verbotenen Dinge gar nicht machen.

    Was mus man umschreiben, wenn man aus einem bool ein long macht?
    IMHO dürfte da kaum etwas passieren.


Anmelden zum Antworten