Speicher atomar schreiben / lesen



  • Hallo zusammen,

    gibt es eine Möglichkeit, 8/16/64 Bit Werte unter WinXP 32 atomar zu schreiben oder lesen? Oder ibt es für sowas gar (pre-)compiler Optionen?

    Danke & Gruß

    Mark



  • Da gibts die Interlocked* functions. (InterlockedExchange, InterlockedIncrement...)

    WX



  • Ähm. Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so". Natürlich sollte man die Variable volatile machen wenn es nötig ist dass der Wert auch "genau dort" gelesen/geschrieben wird wo die entsprechende Stelle im Programm vorkommt. Und natürlich ist ein volatile Read keine Memory-Barrier.

    Für 64 Bit kann man dann die entsprechenden Interlocked* Funktionen verwenden - zum Lesen z.B. InterlockedCompareExchange(p, 0, 0), zum Schreiben InterlockedExchange(p, v).

    Das sicherste wenn man nicht weiss was man verwenden soll/kann ist aber wohl einfach für alles die InterlockedXxx Funktionen zu verwenden.



  • hustbaer schrieb:

    Ähm. Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Bist Du Dir da sicher? Laut MSDN werden unter einem 32 Bit Windows nur 32 Bit Werte atomar geschrieben - bei alles anderem wird dieses Verhalten nicht garantiert. Sprich, ein char oder ein short wird nicht unbedingt atomar geschrieben / gelesen.
    Unter Win64 sind es eben die 64 Bit Werte die atomar geschrieben werden - alles andere ist dann undefiniert. Wiegesagt, alles laut MSDN



  • Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Schwachsinn.



  • lolol schrieb:

    Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Schwachsinn.

    Schwachsinn.



  • lolol schrieb:

    lolol schrieb:

    Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Schwachsinn.

    Schwachsinn.

    Schwachsinn.



  • lolol schrieb:

    lolol schrieb:

    lolol schrieb:

    Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Schwachsinn.

    Schwachsinn.

    Schwachsinn.

    Schwachsinn.



  • Having fun?



  • pub00515 schrieb:

    hustbaer schrieb:

    Ähm. Atomar Schreiben/Lesen geht (unter Windows!) für alles bis inklusive 32 Bit "einfach so".

    Bist Du Dir da sicher? Laut MSDN werden unter einem 32 Bit Windows nur 32 Bit Werte atomar geschrieben - bei alles anderem wird dieses Verhalten nicht garantiert. Sprich, ein char oder ein short wird nicht unbedingt atomar geschrieben / gelesen.
    Unter Win64 sind es eben die 64 Bit Werte die atomar geschrieben werden - alles andere ist dann undefiniert. Wiegesagt, alles laut MSDN

    Hm.
    Mag sein dass 8 und 16 Bit nur auf i386/x64 garantiert ist.
    Wenn es so ist wie du sagst frage ich mich nur wieso es keinen "InterlockedStore" und "InterlockedLoad" Befehl gibt... (oder halt "AtomicStore"/"AtomicLoad")


Anmelden zum Antworten