Seite 1 von 1

Verständnisfrage QMutex QMutexLocker

Verfasst: 19. Juli 2011 12:28
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)?

Re: Verständnisfrage QMutex QMutexLocker

Verfasst: 19. Juli 2011 13:27
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).