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.