Можно ли надежно использовать 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 , на самом деле, может быть высококачественной реализацией, максимум которого сотни, или тысячи, или миллиарды (возможно, 2 31 -1) или квинтиллионы ( Может быть, 2 63 -1), любой из которых был бы полезен, если бы на него можно было полагаться.
Есть ли какой-либо безопасный/надежный способ использования std :: recursive_mutex ?

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

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

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

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

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

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