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