Что такое блокировка с accept_lock_t
Когда я проверил accept_lock_t, он говоритadopt_lock_t assume the calling thread already has ownership of the mutex
.
Итак, что означает словоassume
? Что, если другой поток уже удерживает мьютекс, когда я запрашиваю блокировку (adopt_lock_t) с тем же мьютексом?
1 ответ
Если предположение неверно, поведение программы не ограничивается стандартом C++.
Так что не поймите неправильно.
Что происходит? Это выходит за рамки того, что диктует стандарт. Что-либо. Совместимый компилятор C++ может проверить это условие и, если оно верно, передать историю просмотра веб-страниц вашим родителям. Или может рухнуть. Или тупик. Или ваш жесткий диск может быть отформатирован.
Что касается QoI, то, скорее всего, произойдет сбой или ваш код параллелизма будет бессмысленным (возможно, опустошение счетчика блокировки). Стандарт C++ утверждает, что разработчики не несут ответственности за какое-либо разумное поведение, и компиляторы могут оптимизировать на основе предположения, что блокировка уже удерживается.
Наиболее вероятная реализация заключается в том, что конструктор не блокирует мьютекс, но разблокирует его в деструкторе. Что происходит, когда вы разблокируете мьютекс в потоке, который не заблокирован, независимо от того, заблокирован он в другом потоке или нет, будет зависеть от реализации.