Сообщение Re: Временный блокировщик от 05.02.2024 8:13
Изменено 05.02.2024 14:07 tryAnother
Re: Временный блокировщик
Чтобы не потерять разблокировку, удобнее использовать raii, а не руками вызывать Lock (если код конечно позволяет)
тогда счетчик можно перенести в класс Locable.
тогда счетчик можно перенести в класс Locable.
class Locker;
class Locable
{
friend Locker;
std::atomic<int> m_counter;
public:
Locable(): m_counter(0) {}
operator bool () const {return !m_counter; }
};
class Locker
{
Locker(const Locker&) = delete;
Locker& operator=(const Locker&) = delete;
Locable & m_locable;
public:
Locker(Locable & l):m_locable(l) { ++m_locable.m_counter; }
~Locker() {++m_locable.m_counter;}
};
Re: Временный блокировщик
Чтобы не потерять разблокировку, удобнее использовать raii, а не руками вызывать Lock (если код конечно позволяет)
тогда счетчик можно перенести в класс Locable.
тогда счетчик можно перенести в класс Locable.
class Locker;
class Locable
{
friend Locker;
std::atomic<int> m_counter;
public:
Locable(): m_counter(0) {}
operator bool () const {return !m_counter; }
};
class Locker
{
Locker(const Locker&) = delete;
Locker& operator=(const Locker&) = delete;
Locable & m_locable;
public:
Locker(Locable & l):m_locable(l) { ++m_locable.m_counter; }
~Locker() {--m_locable.m_counter;}
};