Qt Thread mutex



  • Hallo,
    man kann das Prog. ja ganz klassisch Thread sicher machen mit:

    mutex.lock();
    //do s.th.
    mutex.unlock();
    

    Gibt es bei Qt auch wie bei Boost Lockobjekte, also die bei verlassen des Blockes automatisch wieder Freigeben? Und sollte man das mutex Objekt in einer Klasse als static deklarieren?



  • Marc2 schrieb:

    Gibt es bei Qt auch wie bei Boost Lockobjekte, also die bei verlassen des Blockes automatisch wieder Freigeben?

    Du hast keinen Meter der Doku gelesen, richtig?
    Schlag mal "QMutex" auf.
    Und lies gleich noch das Kapitel "Thread Support in Qt" mit. Da steht alles drin was du wissen wilslt.

    Und sollte man das mutex Objekt in einer Klasse als static deklarieren?

    Ein statischer mutex blockiert, wenn er gelockt wird, aber Zugriffe auf alle Instanzen, das ist dir klar? Deshalb sollte man erst überlegen, bevor man ihn static macht.



  • Doch habe ich ich habe eben nur die Klassiche Methode gefunden. Also ist das das, was ich suche:

    QMutexLocker locker(&mutex);
    


  • Marc2 schrieb:

    Also ist das das, was ich suche:

    QMutexLocker locker(&mutex);
    

    Genau.
    Du kannst dir auch mal den QReadWriteLock (statt QMutex) anschauen. Dafür nimmst du dann den QWriteLocker.

    Aber wie gesagt "Thread Support in Qt", da steht alles drinnen.



  • Also QReadWriteLock habe ich mir auch gerade mal angesehen. Aber kann ich das auch als Object machen, was für einen Abschnitt gültig ist?



  • Marc2 schrieb:

    Aber kann ich das auch als Object machen, was für einen Abschnitt gültig ist?

    Der QReadWriteLock sollte aber schon länger als nur für nen Abschnitt gültig sein.
    Aus der Doku kann man doch entnehmen:
    QMutex <-> QReadWriteLock
    QMutexLocker <-> QWriteLocker/QReadLocker

    QMutexLocker locked die QMutex.
    QWriteLocker locked den QReadWriteLock zum Schreiben
    QReadLocker locked den QReadWriteLock zum Lesen.



  • Was davon ist denn jetzt die Alternative zu Boost

    shared_mutex rwMutex;
    shared_lock<shared_mutex> lock(rwMutex);
    unique_lock<shared_mutex> lock(rwMutex);
    


  • The class boost::shared_mutex provides an implementation of a multiple-reader / single-writer mutex.

    The QReadWriteLock class provides read-write locking.

    A read-write lock is a synchronization tool for protecting resources that can be accessed for reading and writing. This type of lock is useful if you want to allow multiple threads to have simultaneous read-only access, but as soon as one thread wants to write to the resource, all other threads must be blocked until the writing is complete.

    Geht das echt nicht klar genug aus der Doku hervor?



  • Also ist die Alternative:

    QReadWriteLock rwLock;
    rwLock.lockForWrite();
    
    rwLock.lockForRead();
    

    Aber wird der Schutz auch am Ende des Abschnittes wieder aufgehoben? Weil das ist ja kein Objekt. Bei Bosst geht das ja aber.

    Und noch was in meinem Buch wird auf QtConcurrent hingewiesen, wo man sich nicht selbst um das mutexen kümmern muss. Dazu habe ich allerdings auch noch nichts brauchbares gefunden.



  • Um es abzukürzen:

    // Member: QReadWriteLock rwLock;
    {
      // rwLock.lockForWrite(); stattdessen
      QWriteLocker locker(&rwLock);
    } // hier ist entlockt!
    // automatisch dank RAII
    {
      // rwLock.lockForRead(); stattdessen
      QReadLocker locker(&rwLock);
    }
    // hier wieder automatisch entlockt
    

    Was hast du denn für ne Doku, wo das nicht drinsteht?
    Schon die hier?
    http://doc.qt.nokia.com/4.6/index.html

    Und bitte immer brav nach der DetailedDescription auf "See also" clicken.



  • Ah das see Also habe ich noch nciht entdeckt gehabt. Danke. Sagt dir QtConcurrent etwas? Eine Klasse scheint es schon mal nciht zu sein.





  • Ja nur leider ohne Beispiele daher für einen Qt Anfänger nicht so leicht zu durchschauen.



  • Marc2 schrieb:

    Ja nur leider ohne Beispiele daher für einen Qt Anfänger nicht so leicht zu durchschauen.

    Dann solltest du dich noch nicht mit solchen Sachen auseinandersetzen.
    Fang doch langsam an und wenn du dich mit Qt wohl fühlst schau in die Tiefen, was es noch alles gibt.

    // edit und google doch einfach mal..
    "QtConcurrent examples" liefert viel viel viel zum Lesen.
    Und mit den Qt-Sourcen (und dem SDK) kommen gaaaanz viele Beispiele, auf die in deinem Buch sicher auch schon oft hingewiesen wurde.

    $ ls ~/src/qt4/4.6.2/examples/qtconcurrent
    imagescaling  map  progressdialog  qtconcurrent.pro  README  runfunction  wordcount
    


  • Hi,In my experience ,mobile unlocking unlock code is very best , in before i tried various software but it spoil my Nokia,So only i approach this http://www.onlinegsmunlock.com/ site,here all model mobile unlocking is possible with various service,Visit here for more details.All the best.


Anmelden zum Antworten