Variablenzugriff Threadsafe.
-
ProgChild schrieb:
net schrieb:
jo, beim mehrprozzi haste das problem der verschachtelten bus-nutzung, da kann einer schon die speicherzelle verändert haben, während der andere erst den befehl decodiert hat. aber naja, ich meinte mit meinem posting das zeitscheiben-multitasking mit nur einer cpu. dabei ist ja ein asm-befehl nicht unterbrechbar...
Okay war jetzt das Resultat, dass ich volatile und Mutexe brauche, um sowas vernünftig zu realisieren, aber eig. volatile in der geg. Situation ausreicht?
Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.
-
wenn du windoofs hast, dann nimm dafür die 'InterlockedXXX' funktionen. die gehen auch bei mehreren prozessoren...
-
Ponto schrieb:
Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.
Warum? Solang die Synchronisation nur in eine Richtung geht und die Variable nur einmal dazu verwendet wird sehe ich kein Problem mit volatile.
-
net schrieb:
wenn du windoofs hast, dann nimm dafür die 'InterlockedXXX' funktionen. die gehen auch bei mehreren prozessoren...
Nein, kein Windoof. Warum ich überhaupt darauf komme. Hab mir den Quelltext von XMMS angeschaut und da scheint es komplett ohne Mutex und ihne volatile gemacht worden zu sein...
Naja, ich werd dann wohl einfach zu sicherheit Mutexe setzten.
Danke an Alle.
-
Jester schrieb:
Ponto schrieb:
Du brauchst nur Mutexe. volatile ist nicht nötig. volatile alleine ist falsch.
Warum? Solang die Synchronisation nur in eine Richtung geht und die Variable nur einmal dazu verwendet wird sehe ich kein Problem mit volatile.
Du hast doch selbst geschrieben, dass es stark systemabhängig sei.
Zunächst gibt es das Totschlagargument, dass C++ selbst kein Multithreading kennt und keine volatile Semantik für Multithreadingprogramme spezifiziert wurde. Aber soweit ich weiss haben auch Systeme mit Multithreading wie POSIX 1003.1 haben keine Semantik für volatile über Threads hinweg spezifiziert.
Dann kann man sich immer darauf zurückziehen, dass es Systeme geben kann in denen das nicht funktioniert. Nehmen wir mal ein System an, bei dem jedes Lesen aus dem Speicher von einem Schreiben mit dem gelesenen Wert gefolgt werden muss. Was passiert nun wenn der eine Thread den Wert ändert und der andere den gleichzeitig liest?
Auf so einem System kann die Singlethreadingsemantik von C++ problemlos implementiert werden.
-
Jo okay, ich ging jetzt von irgendner üblichen Plattform aus, was man so zu Hause hat. Also sowas wie nen AMD mit einem/mehreren Kernen oder auch nen Dualpentium oder sowas. Da sollte volatile genügen.
Auf ner beliebigen Plattform kann man natürlich nicht viel mehr sagen, als daß man geeignet synchronisieren muß.
