using recursive mutex

This commit is contained in:
2026-03-17 19:14:14 +03:00
parent 449978bda0
commit e761625eab

View File

@@ -49,15 +49,11 @@ public:
public: public:
//! \~english Move constructor - transfers ownership of the lock. //! \~english Move constructor - transfers ownership of the lock.
//! \~russian Конструктор перемещения - передает владение блокировкой. //! \~russian Конструктор перемещения - передает владение блокировкой.
Pointer(Pointer && other): pv(other.pv) { other.can_unlock = false; }; Pointer(Pointer && other): pv(other.pv) { pv.mutex.lock(); };
//! \~english Destroys wrapper and releases the mutex. //! \~english Destroys wrapper and releases the mutex.
//! \~russian Уничтожает обертку и освобождает мьютекс. //! \~russian Уничтожает обертку и освобождает мьютекс.
~Pointer() { ~Pointer() { pv.mutex.unlock(); }
if (can_unlock) {
pv.mutex.unlock();
}
}
//! \~english Returns pointer access to the protected value. //! \~english Returns pointer access to the protected value.
//! \~russian Возвращает указательный доступ к защищенному значению. //! \~russian Возвращает указательный доступ к защищенному значению.
@@ -72,7 +68,6 @@ public:
explicit Pointer(PIProtectedVariable<T> & v): pv(v) { pv.mutex.lock(); } explicit Pointer(PIProtectedVariable<T> & v): pv(v) { pv.mutex.lock(); }
PIProtectedVariable<T> & pv; PIProtectedVariable<T> & pv;
bool can_unlock = true;
}; };
//! \~english Replaces the protected value with \a v. //! \~english Replaces the protected value with \a v.