Страница 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