Atomare Operationen



  • Hallo,

    ich kämpfe mit atomaren Operationen.
    Welche der folgenden Anweisungen ist atomar und wenn nicht, warum? Wie sieht es mit anderen Architekturen aus wenn nicht Win32 ?

    std::atomic<int> myint;
    int otherint = 3;
    
    myint = 4;
    myint++;
    myint += 8;
    
    myint += otherint*2;
    myint = myint / myint;
    

  • Mod

    Jedwedes Auswerten oder Ändern von myint ist atomar. Wenn ein Ausdruck mehrere solcher Operationen enthält, ist der Gesamtausdruck natürlich nicht atomar (z.B. Zeile 8). Die Operationen += und ++ sind aber trotzdem atomar, obwohl sie gleichzeitig ändern und auswerten; die führen dann eine fetch_add-Operation aus.

    Wie sieht es mit anderen Architekturen aus wenn nicht Win32 ?

    Atomics sind doch gerade dazu da, diese Dinge plattformunabhängig zu halten. Es ist gut möglich, dass unter Win32 auch die Operationen auf otherint atomar sind, aber es ist eben nicht garantiert, weswegen ich es oben nicht erwähnt habe.



  • danke erstmal!

    Wenn ein Ausdruck mehrere solcher Operationen enthält, ist der Gesamtausdruck natürlich nicht atomar

    könnte man den operator += überladen und irgendwie das statement atomar machen? oder ist das unfug?



  • Zusatzfrage: wo kann ich einsehen welche Operatoren in C++11 atomic sind? Also ++ und -- scheinbar, und Zuweisung auch. Was noch?


  • Mod

    zuppo schrieb:

    könnte man den operator += überladen und irgendwie das statement atomar machen? oder ist das unfug?

    Ich habe doch schon gesagt, dass += bei std::atomic atomar ist.

    zuppo schrieb:

    Zusatzfrage: wo kann ich einsehen welche Operatoren in C++11 atomic sind?

    In einer Referenz zu std::atomic?
    http://en.cppreference.com/w/cpp/atomic
    http://www.cplusplus.com/reference/atomic/
    Oder prinzipiell auch direkt im Sprachstandard, wenn du dich da durchwühlen möchtest.

    Für alles außerhalb des atomic-Headers gibt es natürlich keinerlei Garantien. Wie ich in der vorherigen Antwort schon sagt, kann es durchaus sein, dass andere Operationen auch atomic sind, aber verlassen kann und sollte man sich darauf nicht.


Log in to reply