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

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

Сообщение Anonymous »

Страница 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
Ответить

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

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

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

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

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