Verständnisfragen zum Thema "Threads"

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
comer352l
Beiträge: 47
Registriert: 10. Juli 2007 18:10

Verständnisfragen zum Thema "Threads"

Beitrag von comer352l »

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
child3
Beiträge: 3
Registriert: 5. Dezember 2007 22:06

Beitrag von child3 »

1.) Du brauchst keinen Mutex.

2.) Ein Mutex bedeutet Mutual Exclusion -> „gegen- oder wechselseitiger Ausschluss“

Du verhinderst, dass in deinem Code ein Kritischer Abschnitt in dem z.B. Datenstrukturen, verändert werden nicht parallel ausgeführt werden darf.
Andernfalls kann es zu inkonsistenten Zuständen der Daten führen.

Ein Mutex hat keine Ahnung was du in deinem "Kritischer Abschnitt" machst. Daten Strukturen werden also nicht geschützt. (auch das C Array :-)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Für 1. könnte man auch eine QWaitCondition nehmen.

Und von der generellen Logik her müßte man eine gemeinsame Variable durch einen Mutex absichern...
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

child3 hat geschrieben:1.) Du brauchst keinen Mutex.
Doch. Man muss die Variable sogar noch als 'volatile' definieren damit der Compiler nicht auf die Idee kommt das Auslesen aus dem Speicher wegzuoptimieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
child3
Beiträge: 3
Registriert: 5. Dezember 2007 22:06

Beitrag von child3 »

Christian81 hat geschrieben: Doch. Man muss die Variable sogar noch als 'volatile' definieren damit der Compiler nicht auf die Idee kommt das Auslesen aus dem Speicher wegzuoptimieren.
Wow! Das war mir nicht bekannt. Danke für die Aufklährung.
Antworten