Multithreading und Bedingungsanweisung?
-
Zwei thread teilen sich eine Ressource mit dem zeiger (p).
Thread A setzen den zeiger p auf NULL nach bestimmter zeit.
Thread B arbeitet mit dem Inhalt des zeiger p.
Wir diese Bedingung von Thread A zuende bearbeitet, bevor Thread B damit arbeinten darf?
if(p!= NULL && p->data< 50){ .... }Nehmen wir an die Teilbedingung (p!= NULL) ist wahr, kann es sein, das dann B zwischenzeitlich p auf NULL setzet, bevor die zweite Teilbedingung p->data bearbeitet wird?
-
BorisDieKlinge schrieb:
Nehmen wir an die Teilbedingung (p!= NULL) ist wahr, kann es sein, das dann B zwischenzeitlich p auf NULL setzet, bevor die zweite Teilbedingung p->data bearbeitet wird?
Ja
BorisDieKlinge schrieb:
Thread A setzen den zeiger p auf NULL nach bestimmter zeit.
Bist du Yoda?
-
Im Standard steht nichts von Threads, daher steht dort auch nicht, wann ein Threadkontextwechsel passieren kann, und welche Operationen bezüglich Threads atomar sind. Es ist dort auch nicht festgelegt, ob, wie und wann sich Änderungen in Thread A auf das p in Thread B auswirken. Darum kann man die Frage in diesem allgemeinen Kontext nicht beantworten.
Mir ist aber kein Compiler bekannt, bei dem du diese Zugriffe nicht synchronisieren müsstest. Jedes Arbeiten mit p und das Nullsetzen müssen komplett gegeneinander abgegrenzt werden. Dazu musst du Synchronisierungsobjekte benutzen. Wie das geht, hängt von der jeweiligen API ab. Daher ist es IMHO sinnvoller, wenn du solche Fragen in den entsprechenden Unterforen stellst, nicht hier (außer vielleicht, du verwendest boost::thread).
-
hab ich mir gedacht... muss ich wohl doch hier syncronisieren!!