Also generiere ich z.B. in meiner GUI ein Mutex Objekt und übergebe dem Thread bei der Instanziierung einen Pointer auf dieses Objekt. Wäre dies die richtige Vorgehensweise?
In einem Thread werden Daten von einer Schnittstelle eingelesen und in eine QHash geschrieben.
Du willst mit dem Mutex deine "Daten", in deinem Falle die QHash schuetzen. Ne gute Idee waere, den Mutex gleich neben oder mit dem QHash zu erzeugen. Ich wuerde es zumindest erwarten, wenn ich in dem Code was suchen sollte.
Richtige (vielleicht auch uebertriebene) OO rangehensweisse waere, deine Daten, also den QHash inklusive den Mutex zu kapseln, mit nem Interface versehen, was angepasst ist auf die art und weisse wie auf deine Daten zugreifst.
Ich denke ich werde QReadWriteLock verwenden.
Spricht etwas dagegen?
Prinzipiell geht nen ReadWriteLocker auch .... der hat aber bissi mehr overhaed als wie nen reiner mutex wahrscheinlich (iss eh alles QT implementationsdetail).
Nen ReadWriteLocker macht eigentlich nur Sinn, wenn
mehrere Threads
gleichzeitig lesend lesend auf die Daten zugreifen koennten, und mit einem oder mehreren schreibenden Threads gesynct werden muessen.
Bei der Klassischen Konstellation, genau ein schreibender, und genau ein Lesender Thread macht das ding keinen Sinn.
Der Unterschied ist also, das bei nem readwritelocker mehrere threads grad lesend in der kritischen section unterwegs sind, waehrend bei nem normalen mutex immer nur einer in der section sein kann, egal was er tut.
Deswegen ist der ReadwriteLocker eigentlich kein Mutex mehr.
Wie sieht es eigentlich bei einem Zugriff (lesend/schreibend) auf z.B. 16 Bit Variablen aus
Auf dem ersten Blick, kein problem .... aufn zweiten Block scho ^^
Nen compiler kann optimieren, und das koennte dir immer nen strich durch die rechnung machen. nen 16Bit wert wird bei ner rechenopration wahrscheinlich auf nen 32bit wert aufgebohrt. da wird aus einer offensichtlichen rechenoperation schon mal mehr.
Die meisten BS bieten aber genau dafuer expliziete atomare operationen an, die garantieren das es zu keinen so nebeneffekten kommt. Genau diese werden fuer die implementationen der Synchronisationsobjecte dann verwendet.
Ciao ...