lightalex
@lightalex

Как правильно использовать блокировки?

Доброго времени суток!
Пытаюсь использовать mutex для блокировки потока
std::mutex locker;
locker.lock();
// Здесь идёт работа с потоками в конце которой будет вызвано locker.unlock();
locker.lock();

Мне необходимо использовать блокировки для того чтобы убедиться что потоки закончили свою работу
Но при выполнении программа вываливается на втором locker.lock();
Как правильно воспользоваться блокировками в данном случае?
P.S. Задачу нужно решить именно блокировками mutex. Пример я написал очень условный, чтобы не нагружать вопрос лишним кодом
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
lightalex
@lightalex Автор вопроса
Подведу итоги моего мучения с данной проблемой, если вдруг кто-то столкнется с той же проблемой
В одном потоке нельзя использовать locker.lock() два раза подряд, так как имеется защита от мертвых блокировок
Был использован следующий костыль:
std::mutex locker;
boost::thread t([&]() {
	locker.lock();
});
t.join();
...
locker.lock();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Пример я написал очень условный,

Даже слишком условный, не понять в чем у вас ошибка.
Примитивный пример использования.
ru.cppreference.com/w/cpp/thread/mutex
Также можете использовать
en.cppreference.com/w/cpp/thread/lock_guard
для автоматического lock/unlock в текущем скоупе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы