protected_value - Melnytskyi/fast_task GitHub Wiki

Declaration

    template <class T>
    class protected_value {
        T value;

    public:
        task_rw_mutex mutex;

        template <class... Args>
        protected_value(Args&&... args)
            : value(std::forward<Args>(args)...) {}

        template <class _Accessor>
        auto get(_Accessor&& accessor) const {
            read_lock lock(const_cast<task_rw_mutex&>(mutex));
            return accessor(const_cast<const T&>(value));
        }

        template <class _Accessor>
        auto set(_Accessor&& accessor) {
            write_lock lock(mutex);
            return accessor(value);
        }
    };

This class provides write race protection for any class and allows reading from any thread. The mutex variable is public to allow usage for condition variables but not for any other purpose. DO NOT USE THE INTERNAL MUTEX WHEN YOU ARE IN THE GET/SET METHODS.

Internally, this class uses task_rw_mutex, read_lock and write_lock

Usage

protected_value<int> value;
//...
value.get([](int i){
    //...
});
value.set([](int& i){
    i++;
});
⚠️ **GitHub.com Fallback** ⚠️