Страница cppreference для std :: recursive_mutex говорит: < /p>
Максимальное количество раз, когда рекурсивный_mutex может быть заблокирован, не указано, но после того, как это число будет достигнуто, призывы к блокировке бросают std :: system_error и вызовы Try_lock будут возвращать false. /> so: < /p>
Если я сделаю это буквально, я должен сделать вывод, что небезопасно использовать (блокировать) std :: recursive_mutex < /code> вообще, так как это может быть Zero. Максимум всегда - по крайней мере 1, и может быть ровно 1?
OK, в этом случае можно безопасно использовать std :: recursive_mutex как std :: mutex , но это небезопасно, когда он когда -либо использует рекурсивно (т.е. Интерпретация все еще слишком глупа, и я должен предположить, что это означает, что максимум всегда 2, по крайней мере, 2, и может быть ровно 2? Хорошо, в этом случае я могу заблокировать его дважды, но небезопасно заблокировать его 3 раза. < /P>
< /li>
< /ul>
Приведенная выше аргумент кажется все более устойчивым,
, что приводит к заключению «std :: recursive_mutex не имеет четкого контракта, поэтому он не использует его. Т.е. Если я хочу надежный рекурсивный мутекс, мне нужно написать свой собственный. Позор, поскольку std :: recursive_mutex , на самом деле, может быть высококачественной реализацией, максимум которого сотни, или тысячи, или миллиарды (возможно, 2 31 -1) или квинтиллионы (может быть, 2
-1), любой из которых будет полезен. std :: recursive_mutex ?
Подробнее здесь: https://stackoverflow.com/questions/794 ... d-reliably