Thread safety / Atomarer Zugriff auf primitive Datentypen
-
Hallo dot,
Aber hier gehts um C++
Jetzt bin ich spitzfindig
Hier gehts ganz klar um MFC(Visual C++) und daher um Windows.
Herzliche Grüsse
Walter
-
Nur um es nochmal ganz klar und deutlich zu sagen: Es ist nicht definiert ob und unter welchen Umständen irgendwelche Operationen in C++ atomar sind oder nicht und daher kannst du dich nicht drauf verlassen. Period.
Wenn du atomare Operationen brauchst, dann musst du dich entsprechender Primitive bedienen, wie z.B. die erwähnten Funktionen der WinAPI oder irgendwelche Compiler Intrinsics oder sonstwas. C++11 bietet auch atomics in der Standardlibrary, die sind nur noch nicht überall verfügbar.
-
weicher schrieb:
Hier gehts ganz klar um MFC(Visual C++) und daher um Windows.
Point taken. Das ändert aber nix.
-
Ok, solange mein Programm nicht abstürzt weil zwei Threads gleichzeitig auf eine Variable lesend/schreibend zugreifen, ist alles in Ordnung.
Veraltete Werte machen mir nicht aus. Dann wird halt erst im nächsten Zyklus aktualisiert.
Ansonsten synchronisiere ich.
Danke!
-
SchlechterInformatiker schrieb:
Bezüglich des Postings von Merano:
Da steht "The Intel486 processor"... was ist wenn aber mein Programm auf einem AMD oder sonst was läuft?Ich glaube nicht, das es sich ein Hersteller leisten kann dazu NICHT kompatibel zu sein.
Wenn du es genau wissen musst: Auch AMD gibt schöne References raus; ebenfalls kostenlos ...
Was wäre denn sonstwas ?
Wir sprechen hier konkret von Windows (genauer: MFC ...
-
merano schrieb:
Was wäre denn sonstwas ?
Windows läuft aber auf den verschiedensten Plattformen (x86, x64, IA64, ARM, ...)
Und außerdem hängt es vom jeweiligen Code und davon was genau der Compiler draus macht ab. Selbst wenn man sich auf Windows, x86 und MSVC festlegt, kann man immer noch keine allgemeinen Aussagen über solche Dinge machen.
-
SchlechterInformatiker schrieb:
Ok, solange mein Programm nicht abstürzt weil zwei Threads gleichzeitig auf eine Variable lesend/schreibend zugreifen, ist alles in Ordnung.!
Ich glaube Du hast es immer noch nicht ganz verstanden. Ein Programm stürzt _niemals_ ab weil 2 oder mehr Threads gleichzeitig irgendwas tun. Durch das "gleichzeitige" tun können aber Daten korrumptiert werden, die dann zu Abstürzen führen. Hat dot aber schon geschrieben.
Falls Du es nur falsch beschrieben hast und trotzdem das richtige meintest: Solche Spitzfindigkeiten sind bei Multithreading sehr wichtig. Du siehst ja selbst der Pfad der Gerechten (= was man tun darf und was nicht) ist sehr schmal.
-
SchlechterInformatiker schrieb:
Ok, solange mein Programm nicht abstürzt weil zwei Threads gleichzeitig auf eine Variable lesend/schreibend zugreifen, ist alles in Ordnung.
Wollte damit nur sagen dass mir jetzt klar ist, dass ein Programm wegen sowas nicht abstürzen kann. Und dass es wegen inkonsistenten Daten dennoch abstürzen kann ist eh klar.
-
SchlechterInformatiker schrieb:
Bezüglich des Postings von Merano:
Da steht "The Intel486 processor"... was ist wenn aber mein Programm auf einem AMD oder sonst was läuft?Auch das habe ich schon geschrieben:
Das ist Standard für alle x86, x64 kompatiblem Prozessoren und genug andere auch.
Wie sollte esauch anders sein, bei den entsprechenden Busbreiten....
-
Ok, danke an alle!