C++ 递归_互斥体的最大所有权级别的下限?
引述: 拥有C++ 递归_互斥体的最大所有权级别的下限?,c++,pthreads,language-lawyer,recursive-mutex,C++,Pthreads,Language Lawyer,Recursive Mutex,引述: 拥有递归\u互斥对象的线程可以通过对该对象调用lock()或try\u lock()来获得额外的所有权级别。未指定单个线程可以获得多少级别的所有权。如果线程已经获得了递归\u互斥对象的最大所有权级别,则对try\u lock()的额外调用将失败,对lock()的额外调用将抛出类型为system\u error的异常 “最大所有权水平”的下限是否大于1?递归pthread互斥锁呢?标准中没有规定下限。这可能是故意的 旧的标准(我认为是C)确实为这样的事情提供了下限。结果是人们编写了编码标准
递归\u互斥对象的线程可以通过对该对象调用lock()
或try\u lock()
来获得额外的所有权级别。未指定单个线程可以获得多少级别的所有权。如果线程已经获得了递归\u互斥对象的最大所有权级别,则对try\u lock()
的额外调用将失败,对lock()
的额外调用将抛出类型为system\u error
的异常
“最大所有权水平”的下限是否大于1?递归pthread互斥锁呢?标准中没有规定下限。这可能是故意的
旧的标准(我认为是C)确实为这样的事情提供了下限。结果是人们编写了编码标准,说你不能超过这些下限。例如:它是(我认为现在仍然是)实现定义了一个外部符号的多少个字符在比较相等性时是重要的。因此,a_very_long_name_really_加额外填充
和a_very_very_long_name_really_加额外填充x
可能被视为同一符号。最小长度规定为8,编码标准规定“外部符号的最大长度为8个字符”
关于这个值的合理下限:我可以很容易地想象,计数可能被位压缩到其他字段中,这样整个事情就可以用合适的指令进行原子更新。因此,它可能比32位小很多。(它只需要足够大以满足最大调用堆栈深度,因此在受限环境中,31可能就足够了。)它是(如中所述,标准不要求任何特定的值,实现也不需要记录)。也就是说,它基本上是关于一个引用计数器,似乎没有太多理由(在大多数情况下),这至少不是32位int。因此,出于所有的意图和目的,我会认为这个极限比实际需要的要高。但是,一个很大的问题。事实上,它没有给出下限,这可能是标准中的缺陷。