Parallelprogrammierung mit C++ und Qt, Teil 2: Bildsequenzen parallel berechnen

    <   Beitrag   >    

    <   Thread   >    

Re: QMutexLocker

Avatar von Marc Mutz

Marc Mutz

59 Beiträge seit 06.10.2000

   E-Mail   
17.02.2012 13:48 Permalink
> Im übrigen greift QMutexLocker besonders dann
> helfend ein, wenn ein Thread abstürzt und dabei
> gerade ein Lock hält, was unmittelbar ein
> Deadlock zur Folge hätte.

Das ist _so_ nicht ganz korrekt: Wenn ein Thread abstürzt, stürzt das
gesamte Programm mit ab. Dann macht es auch keinen Sinn mehr, den
Mutex noch zu unlocken, selbst, wenn der Destruktor des QMutexLockers
noch ausgeführt würde, was bei Abstürzen nicht der Fall ist.

Was Sie schreiben ist jedoch für _Ausnahmen_ korrekt, und genau da
liegt der Punkt: In C++ kann potentiell jeder Funktionsaufruf eine
Exception werfen (und sei's nur std::bad_alloc), und ohne
QMutexLocker (RAII) gibt's dann halt Deadlock. Jedes Mal analysieren
zu müssen, ob da jetzt irgendwer zwischen meinem lock() und unlock()
Speicher anfordern könnte, artet sicher schnell in viel Arbeit aus;
Arbeit, die der QMutexLocker-Ansatz eben vermeidet :)

Klar, auf Desktop-Systemen wirft die Runtime nie bad_alloc, aber wer
hat heutzutage schon noch Desktops :)

Thread-Anzeige einblenden

Anzeige