std::lock_guard und return



  • Hallo @all

    Angenommen ich schreibe eine Klasse, welche einen std::thread wrappt und während
    dieser seinen Algorithmus abarbeitet soll man bestimmte Parameter abfragen können.

    // ...
    public:
        bool isRunning()
        {
            std::loack_guard<std::mutex> lck(mtx);
            return is_running;
        }
    // ...
    private:
        std::mutex mtx;
        bool is_running;
    // ...
    

    Meine Frage bzgl. obigem Code lautet nun: Ist std::lock_guard richtig verwendet?

    ODER

    muss ich eher sowas schreiben:

    // ...
    public:
        bool isRunning()
        {
            bool ret;
            mtx.lock();
            ret = is_running;
            mtx.unlock();
            return ret;
        }
    // ...
    private:
        std::mutex mtx;
        bool is_running;
    // ...
    

    Alternativ gäbe es natürlich std::atomic, jedoch verwende ich mehrere Parameter, welche regelmäßig aktualisiert werden sollen (vom thread), weshalb ein mutex effizienter sein sollte, als mehrere atomics

    Danke und mfG (und SCHÖNE WEIHNACHTEN)
    shft



  • Nein, deine erste Variante ist genau richtig. Kurz und was in dem Fall gleichbedeutend mit fehlerfrei ist. Selbst wenn Exceptions auftreten sollten 8was sie nicht tun können in der return Zeile).



  • Das spezifische Problem lässt sich via http://en.cppreference.com/w/cpp/thread/thread/joinable umsetzen.
    Dennoch: ja, dein erster Code ist korrekt.



  • Super!

    Danke für die schnelle Hilfe!

    mfG


Anmelden zum Antworten