Verständnisfrage QMutex QMutexLocker

Verschiedenes zu Qt
Antworten
anno1988
Beiträge: 280
Registriert: 23. Januar 2009 20:49

Verständnisfrage QMutex QMutexLocker

Beitrag von anno1988 »

Hallo,

wie sieht es aus, wenn man einen QMutexLocker zusammen mit einem QMutex verwendet. Angenommenein Thread hat den Mutex gesperrt., wie im Bsp.

Bsp.:

Code: Alles auswählen


int complexFunction(int flag)
 {
     QMutexLocker locker(&mutex);
//weitere Aktionen ausführen
}



Wenn jetzt ein zweiter Thread die selbe methode aufrufen will (und angenommen sei ist gesperrt), kann ich beim zweiten Thread in eine Endlosschleife gehen und warten bis der QMutex wieder frei ist.

Aber wie prüfe ich am besten, ob der Mutex wieder frei ist (für die Endlosschleife)?
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: Verständnisfrage QMutex QMutexLocker

Beitrag von brax »

Du brauchst nicht aktiv zu checken, ob der Mutex gelockt ist. Der Sinn des Mutex ist, dass Dir genau das abgenommen wird. D.h. der Aufruf von QMutex::lock() blockiert so lange der Mutex gelockt ist (von einem anderen Thread - ist es der selbe Thread kommt es zum Deadlock, wenn der Mutex nicht auf recursive=true steht, was nur sein sollte, wenn man sicher ist, dass es sein soll). Der QMutexLocker macht nichts anderes als im Konstruktor QMutex::lock aufzurufen. Im Destruktor ruft er dann unlock auf. Der QMutexLocker ist also nur, um den Umgang mit dem Mutex bequemer zu machen und um zu verhindern, dass ein unlock vergessen wird (z.B. wenn Deine Methode mehrere returns hat).
Antworten