Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归_互斥体的最大所有权级别的下限?_C++_Pthreads_Language Lawyer_Recursive Mutex - Fatal编程技术网

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。因此,出于所有的意图和目的,我会认为这个极限比实际需要的要高。但是,一个很大的问题。事实上,它没有给出下限,这可能是标准中的缺陷。