Сообщение Re: Временный блокировщик от 05.02.2024 13:50
Изменено 05.02.2024 13:54 Chorkov
Re: Временный блокировщик
Здравствуйте, Marty, Вы писали:
M>Здравствуйте!
M>Где-то в каком-то потоке периодически что-то производится, какие-то действия. Иногда надо временно запретить их производить.
M>В других потоках, или в том же потоке, можно запрещать, рекурсивно, главное, разлочить столько же раз, сколько и залочил.
M>Что-то городить с какими-то примитивами синхронизации не вижу смысла, ну, может я ошибаюсь.
...
M>Ну или как лучше сделать? Может, есть что-то стандартное, чем изобретать велосипеды?
shared_mutex:
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:
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;
}
};