Verständnisfragen zum Thema "Threads"
Verfasst: 9. August 2008 17:28
Hallo,
ich arbeite jetzt schon seit längerem mit Threads, aber einige Fragen stellen sich immer noch bzw. ich habe teilweise widersprüchliches darüber gelesen. Hier sind 2 davon:
1.) Standard-Beispiel: Thread mit while-Schleife, die solange läuft, bis eine gemeinsame boolsche Variable (oder meinetwegen auch ein integer) zum Abbrechen gesetzt wird.
Muss man hier die Überprüfung der Variable bei jedem Schleifen-Durchlauf auch mit einem Mutex absichern ? Wie schaut es beim setzten (also Schreib-Zugriff) durch den anderen Thread aus ? Stichwort "atomic operations".
Bei komplexeren Datentypen oder Rechenoperationen ist mir die Sache ja klar...
2.) Was geschieht, wenn ich ein ganz normales C-Array (also z.B. char myArray[256]) mit einem QMutex schütze ? Ist der Zugriff auf die Elemente dann safe ? myArray ist ja nur ein Pointer, folglich wären nur die Address-Zuweisung für das erste Element (also z.B. myArray = 0x12345678) safe. Der Zugriff auf die Addressen der anderen Elemente und vorallem die Elemente selbst wäre nicht safe.
Oder schnallt der Mutex das etwa und sorgt für einen kompletten Schutz ?
Gruß,
Frank
ich arbeite jetzt schon seit längerem mit Threads, aber einige Fragen stellen sich immer noch bzw. ich habe teilweise widersprüchliches darüber gelesen. Hier sind 2 davon:
1.) Standard-Beispiel: Thread mit while-Schleife, die solange läuft, bis eine gemeinsame boolsche Variable (oder meinetwegen auch ein integer) zum Abbrechen gesetzt wird.
Muss man hier die Überprüfung der Variable bei jedem Schleifen-Durchlauf auch mit einem Mutex absichern ? Wie schaut es beim setzten (also Schreib-Zugriff) durch den anderen Thread aus ? Stichwort "atomic operations".
Bei komplexeren Datentypen oder Rechenoperationen ist mir die Sache ja klar...
2.) Was geschieht, wenn ich ein ganz normales C-Array (also z.B. char myArray[256]) mit einem QMutex schütze ? Ist der Zugriff auf die Elemente dann safe ? myArray ist ja nur ein Pointer, folglich wären nur die Address-Zuweisung für das erste Element (also z.B. myArray = 0x12345678) safe. Der Zugriff auf die Addressen der anderen Elemente und vorallem die Elemente selbst wäre nicht safe.
Oder schnallt der Mutex das etwa und sorgt für einen kompletten Schutz ?
Gruß,
Frank