C ++ блокирует кодовое исключение для блока с областью видимости - PullRequest
0 голосов
/ 06 декабря 2018

Мне нужно реализовать блокировку на блоке с областью видимости.Я обнаружил, что std :: lock_guard реализует то же самое:

std :: lock_guard

Указывает, что

пытается завладеть мьютексомэто дано.Когда элемент управления покидает область, в которой был создан объект lock_guard, lock_guard разрушается и мьютекс освобождается

Но снова он здесь заявляет

Если блокировка вызываетсяпоток, которому уже принадлежит мьютекс, поведение не определено: например, программа может зайти в тупик.

std :: mutex :: lock

std :: mutex :: lock вызывается внутренне std :: lock_guard - у меня есть сценарий, что обратный вызов будет вызывать метод-член, когда данные поступают на порт - ожидается, что данные могут поступать в виде кратных, когда это касается методавыполняется одним обратным вызовом?

1 Ответ

0 голосов
/ 06 декабря 2018

Да, lock_guard вызывает lock() для блокировки мьютекса.(Как еще это могло бы работать?) Если вы думаете, что поток может рекурсивно заблокировать std::mutex, либо через lock_guard, либо напрямую, вы должны использовать вместо него std::recursive_mutex, который не имеет этой слабости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...