/*! \file piprotectedvariable.h * \ingroup Thread * \~\brief * \~english Thread-safe variable * \~russian Потокобезопасная переменная */ /* PIP - Platform Independent Primitives Thread-safe variable Ivan Pelipenko peri4ko@yandex.ru, Stephan Fomenko, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef PIPROTECTEDVARIABLE_H #define PIPROTECTEDVARIABLE_H #include "pimutex.h" template class PIP_EXPORT PIProtectedVariable { public: //! \~english Sets value to \"v\" //! \~russian Устанавливает значение как \"v\" void set(T v) { PIMutexLocker _ml(mutex); var = std::move(v); } //! \~english Returns copy of value //! \~russian Возвращает копию значения T get() const { PIMutexLocker _ml(mutex); return var; } //! \~english Lock mutex and returns reference of value //! \~russian Блокирует мьютекс и возвращает ссылку на значение T & lock() { mutex.lock(); return var; } //! \~english Unlock mutex //! \~russian Разблокирует мьютекс void unlock() { mutex.unlock(); } //! \~english Sets value to \"v\" //! \~russian Устанавливает значение как \"v\" PIProtectedVariable & operator=(T v) { set(std::move(v)); return *this; } private: mutable PIMutex mutex; T var; }; #endif