Нижняя граница для максимального уровня владения для recursive_mutex?

квотирование [Thread.mutex.recursive]:

Поток, которому принадлежит recursive_mutex объект может приобрести дополнительные уровни владения, позвонив lock() или же try_lock() на этом объекте. Не определено, сколько уровней владения может быть получено одним потоком. Если поток уже приобрел максимальный уровень владения для recursive_mutex объект, дополнительные звонки try_lock() не удастся, и дополнительные вызовы lock() должен выбросить исключение типа system_error,

Есть ли нижняя граница больше 1 для «максимальный уровень владения«? Как насчет рекурсивных мьютексов pthread?

2

Решение

Нижний предел не указан в стандарте. Это, вероятно, намеренно.

Более старые стандарты (я думаю) использовали для обеспечения более низких пределов для подобных вещей. В результате люди написали стандарты кодирования, в которых говорилось, что вы не можете использовать больше, чем эти нижние пределы. Например: Это была (и я думаю, до сих пор) реализация, определяющая, сколько символов внешнего символа было значимым при сравнении на равенство. Так a_very_very_long_name_indeed_with_extra_padding а также a_very_very_long_name_indeed_with_extra_paddingX может рассматриваться как один и тот же символ. Минимальная длина была указана как 8, а стандарты кодирования были написаны с указанием «максимальная длина внешнего символа — восемь символов».

Что касается правдоподобной нижней границы этого значения: я легко могу представить, что счетчик может быть упакован битами в какое-то другое поле, так что все это может быть обновлено атомарно с помощью подходящей инструкции. Таким образом, это может быть намного меньше 32 бит. (Он действительно должен быть достаточно большим для максимальной глубины стека вызовов, поэтому в стесненных условиях 31 может быть достаточно хорошим.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]