mutithreading locks in c++



  • Hallo,

    ich bin neu in der c++ multithreaded programmierung. suche eine geeigneten lock in C++ fuer folgendes szenario:
    1 write thread at a time, multiple reader threads + wenn kein write thread aktiv ist

    ich habe schon in der standard lib mich umgesehen aber nichts passendes gefunden. gibt es hierzu was in boost? kann jemand bitte ein kurzes beispiel zeigen?

    habe im moment folgendes. der code gibt mir aber nur read/write lock...dh es koennen nicht mehrere reader gleichzeitig lesen?

    #include <boost/thread/locks.hpp>
    #include <boost/thread/shared_mutex.hpp>
    
    typedef boost::shared_mutex Lock;
    typedef boost::unique_lock<Lock> WriteLock;
    typedef boost::shared_lock<Lock> ReadLock;
    
    class foo {
    private:
        Lock lock_;
    
    public:
        void read() {
             ReadLock r_lock(lock_);
             // do stuff
        }
    
        void write() {
             WriteLock w_lock(lock_);
             // do stuff
        }
    };
    

    MFG
    HannesJ


  • Mod

    shared_mutex ist schon das richtige. Gibt es auch in der Standardbibliothek. Kannst du genauer erläutern, was dein Problem damit ist?



  • hallo SeppJ,

    was passiert wenn meine lese threads arbeiten und ein schreib thread zugriff braucht? wird dieser dann deadlocked bis die lese threads fertig sind?



  • Hallo SeppJ,

    was passiert wenn meine lese threads arbeiten und ein schreib thread zugriff braucht? wird dieser dann deadlocked bis die lese threads fertig sind?

    std::shared_mutex gibt es erst mit c++17... mein aktueller clang compiler kann das noch nicht...



  • (Randnotiz: shared_mutex wird von gcc 5.0 und clang 3.7 unterstützt. Also beides jeweils brandneu.)



  • Hallo 5cript: danke der info.
    Hallo SeppJ: ich implementiere gerade den multithreading teil aus dem anderen thread, was meinst du dazu? thread: https://www.c-plusplus.net/forum/335080



  • HannesJ schrieb:

    Hallo SeppJ,

    was passiert wenn meine lese threads arbeiten und ein schreib thread zugriff braucht? wird dieser dann deadlocked bis die lese threads fertig sind?

    std::shared_mutex gibt es erst mit c++17... mein aktueller clang compiler kann das noch nicht...

    Ein Deadlock ist, wenn 2 threads sich gegenseitig blockieren. In Deinem Fall wäre es kein Deadlock sondern einfach nur ein Lock wait. Also ein ganz normaler Vorgang.


Anmelden zum Antworten