2

引用[thread.mutex.recursive]

拥有一个对象的线程可以recursive_mutex通过调用该对象来获得额外的所有权级别。未指定单个线程可以获得多少级别的所有权。如果一个线程已经获得了一个对象的最大所有权,额外的调用将会失败,额外的调用将会抛出一个类型的异常。lock()try_lock()recursive_mutextry_lock()lock()system_error

“最大拥有权”是否存在大于 1 的下限?递归 pthread 互斥锁呢?

4

1 回答 1

0

标准中没有规定下限。这可能是故意的。

较旧的标准(CI 认为)确实用于为此类事情提供较低的限制。结果是人们编写的编码标准说你不能使用超过这些下限。例如:它是(我认为仍然是)实现定义了在比较相等性时外部符号的多少个字符是重要的。所以a_very_very_long_name_indeed_with_extra_paddinga_very_very_long_name_indeed_with_extra_paddingX可能被视为相同的符号。最小长度指定为 8,并且编写了编码标准,指定“外部符号的最大长度为 8 个字符”。

关于这个值的合理下限:我可以很容易地想象计数可能会被打包到其他一些字段中,以便可以使用合适的指令自动更新整个事物。因此,它可能小于 32 位。(它只需要足够大以实现最大调用堆栈深度,因此在受限环境中,31 可能就足够了。)

于 2016-05-13T09:11:39.150 回答