Speicherzugriff bei Threads



  • Skym0sh0 schrieb:

    Hä?
    Ja und?

    Was zeigt das Programm so? oder was soll es zeigen?
    Und infwiefern verneint es die volatile-Aussage?

    Das habe ich bewusst zitiert:

    fsdfsdfs schrieb:

    unsigned int ist ok, das brauchst du nicht schützen.

    Und genau diese Aussage habe ich widerlegt. Ich habe mich auf keine volatile-Aussage bezogen. Bei der Diskussion geht es doch darum, ob man eine globale Variable beim parallelen Zugriff schützen muss. Und die Antwort lautet: ja.

    Im übrigen ändert sich nichts, wenn wenn ich die Variable volatile mache.



  • Also, ich hatte nie Probleme, solches Verhalten nachzubilden - das hier reicht schon:

    #include <iostream>
    #include <thread>
    
    int main(int argc,char** argv)
    {
      std::size_t counter=0;
      std::thread([&]() {for(;;)counter++;}).detach();
    
      for(;;)
      {
        std::cout << counter << std::endl;
        std::this_thread::sleep_for(std::chrono::milliseconds(1000));
      }
    }
    

    Gibt bei mir mit gcc 4.8.1 und -O2 immer 0 aus.

    Hab auch sonst schon oft ausprobiert, was passiert, wenn ich gemeinsam verwendete Variablen nicht angemessen schütze. Die Antwort ist oft einfach: es passiert nichts mehr, irgendein wichtiger Thread optimiert sich quasi selbst weg und hält den Betrieb auf.


Anmelden zum Antworten