Информация об изменениях

Сообщение Re: Временный блокировщик от 05.02.2024 13:50

Изменено 05.02.2024 13:54 Chorkov

Re: Временный блокировщик
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!



M>Где-то в каком-то потоке периодически что-то производится, какие-то действия. Иногда надо временно запретить их производить.


M>В других потоках, или в том же потоке, можно запрещать, рекурсивно, главное, разлочить столько же раз, сколько и залочил.


M>Что-то городить с какими-то примитивами синхронизации не вижу смысла, ну, может я ошибаюсь.

...

M>Ну или как лучше сделать? Может, есть что-то стандартное, чем изобретать велосипеды?


shared_mutex:

class Locable
{
   mutable std::shared_mutex  m_mutex;

public:
   void lock() { m_mutex.lock_shared(); }
   void unlock() { m_mutex.unlock_shared(); }
   bool isLocked() const {
        if( ! m_mutex.try_lock() ) 
             return false;
        m_mutex.unlock();
        return false;
   }
};
Re: Временный блокировщик
Здравствуйте, Marty, Вы писали:

M>Здравствуйте!



M>Где-то в каком-то потоке периодически что-то производится, какие-то действия. Иногда надо временно запретить их производить.


M>В других потоках, или в том же потоке, можно запрещать, рекурсивно, главное, разлочить столько же раз, сколько и залочил.


M>Что-то городить с какими-то примитивами синхронизации не вижу смысла, ну, может я ошибаюсь.

...

M>Ну или как лучше сделать? Может, есть что-то стандартное, чем изобретать велосипеды?


shared_mutex:

class Locable
{
   mutable std::shared_mutex  m_mutex;

public:
   void lock() { m_mutex.lock_shared(); }
   void unlock() { m_mutex.unlock_shared(); }
   bool isLocked() const {
        if( ! m_mutex.try_lock() ) 
             return true;
        m_mutex.unlock();
        return true;
   }
};