2016-05-13 53 views
2

[thread.mutex.recursive]引用:recursive_mutex的最大拥有级别的下限?

拥有一个recursive_mutex对象可以通过调用该对象上lock()try_lock()获取所有权的附加级别的线程。没有说明单个线程可以获得多少所有权级别。如果线程已获得recursive_mutex对象的最大所有权级别,则对try_lock()的其他调用将失败,对lock()的额外调用将​​抛出类型为system_error的异常。

最大拥有级别”的下限是否大于1?递归pthread互斥体呢?

+0

这是[unspecified](http://stackoverflow.com/questions/2397984/undefined -unspecified-and-implementation-defined-behavior)(如在,标准没有强制任何特定的值,并且实现不需要记录这个)。 –

+0

这就是说,它基本上是一个参考计数器,并没有什么理由(在大多数情况下),至少不是至少一个32位整数。所以,对于所有意图和目的,我认为这个限制比你实际需要的要高。 –

+0

虽然很好的问题。没有给出下限的事实可能是标准中的缺陷。 –

回答

0

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

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

在这个值的合理下限上:我可以很容易地想象出count可能会被封装到其他一些字段中,以至于整个事物可以用适当的指令自动更新。因此,它可能比32位少得多。 (它只需要足够大的最大调用堆栈深度,所以在一个受限制的环境中,31可能已经足够好了。)