Можно ли надежно использовать std :: recursive_mutex?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли надежно использовать std :: recursive_mutex?

Сообщение Anonymous »

Страница cppreference для std :: recursive_mutex говорит: < /p>

Максимальное количество раз, когда Recursive_mutex может быть заблокирован, не указано, но после этого число будет Достигнуто, вызовы к блокировке бросают std :: system_error, а вызовы try_lock вернется false.

so: < /p>

Если я возьму это буквально, я должен сделать вывод, что небезопасно использовать (блокировать) std :: recursive_mutex вообще, так как этот максимум может быть нулевым. это означает Максимум всегда - по крайней мере 1, и может быть ровно 1? когда -либо используйте его рекурсивно (то есть заблокируйте его дважды одновременно), так как максимум может быть 1. < /p>
< /li>
Но, возможно, это Интерпретация все еще слишком глупа, и я должен предположить, что это означает, что максимум всегда 2, по крайней мере, 2, и может быть ровно 2? Хорошо, в этом случае я могу заблокировать его дважды, но небезопасно блокировать его 3 раза. < /P>
< /li>
< /ul>
Приведенная выше аргумент Кажется все более плохим,
, который, по -видимому, приводит к выводу «std :: recursive_mutex не имеет четкого контракта, поэтому небезопасно использовать его, период». Т.е. Если я хочу надежного рекурсивного мутекса, я должен написать свой собственный. Было бы проще просто написать альтернативную реализацию рекурсивной мутекс с нуля и не использовать std :: recursive_mutex вообще.)
Это кажется Стыд, так как std :: recursive_mutex , на самом деле, может быть высококачественной реализацией, максимум которого сотни, или тысячи, или миллионы, или, возможно, ограничено только ограничениями памяти, любая из которых будет полезно, если бы это могло Нанесите полаженение.

Подробнее здесь: https://stackoverflow.com/questions/794 ... d-reliably
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»