Мы используем файлы cookie
Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Вызов метода lock
на одном и том же объекте мьютекса (например, std::mutex
или std::recursive_mutex
) из одного и того же потока приведет к следующему:
std::mutex
: Произойдет взаимная блокировка (deadlock). Поток, который уже владеет мьютексом, попытается снова его заблокировать, но не сможет, так как он уже заблокирован самим этим потоком.std::recursive_mutex
: Блокировка будет успешной. std::recursive_mutex
отслеживает, сколько раз он был заблокирован текущим потоком. Поток получит мьютекс, и счетчик рекурсивных блокировок будет увеличен. Для полного разблокирования мьютекса потребуется вызвать unlock
столько же раз, сколько было успешных вызовов lock
.Вызов метода lock
на одном мьютексе из разных потоков является стандартным механизмом синхронизации. Поток, вызвавший lock
, будет заблокирован (остановлен) до тех пор, пока поток, владеющий мьютексом, не вызовет метод unlock
.
Пример с std::mutex
(приводит к deadlock из одного потока):
cpp
Вызов метода lock
на одном и том же объекте мьютекса (например, std::mutex
или std::recursive_mutex
) из одного и того же потока приведет к следующему:
std::mutex
: Произойдет взаимная блокировка (deadlock). Поток, который уже владеет мьютексом, попытается снова его заблокировать, но не сможет, так как он уже заблокирован самим этим потоком.std::recursive_mutex
: Блокировка будет успешной. std::recursive_mutex
отслеживает, сколько раз он был заблокирован текущим потоком. Поток получит мьютекс, и счетчик рекурсивных блокировок будет увеличен. Для полного разблокирования мьютекса потребуется вызвать unlock
столько же раз, сколько было успешных вызовов lock
.Вызов метода lock
на одном мьютексе из разных потоков является стандартным механизмом синхронизации. Поток, вызвавший lock
, будет заблокирован (остановлен) до тех пор, пока поток, владеющий мьютексом, не вызовет метод unlock
.
Пример с std::mutex
(приводит к deadlock из одного потока):
cpp
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.