Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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 我们真的需要属性为“的互斥体吗?”;PTHREAD“u MUTEX”u STALLED“;与“相对的”是什么;PTHREAD“u MUTEX”u ROBUST;?_C_Linux_Multithreading_Synchronization_Mutex - Fatal编程技术网

C 我们真的需要属性为“的互斥体吗?”;PTHREAD“u MUTEX”u STALLED“;与“相对的”是什么;PTHREAD“u MUTEX”u ROBUST;?

C 我们真的需要属性为“的互斥体吗?”;PTHREAD“u MUTEX”u STALLED“;与“相对的”是什么;PTHREAD“u MUTEX”u ROBUST;?,c,linux,multithreading,synchronization,mutex,C,Linux,Multithreading,Synchronization,Mutex,我正在阅读APUE第12章(第3版),它说:我们可以将PTHREAD\u MUTEX\u STALLED或PTHREAD\u MUTEX\u ROBUST设置为互斥。但是我认为我们不需要属性为PTHREAD\u mutex\u STALLED的互斥体,互斥体应该总是“健壮的”,这样我们就可以在锁定互斥体的一方死机时收到通知。如果互斥被“暂停”,我们将永远暂停 我知道Windows的互斥锁始终是“健壮的”,如果锁定互斥锁的一方死机,我们将收到错误通知。那么,在什么样的场景中,我们必须使用“暂停”互

我正在阅读APUE第12章(第3版),它说:我们可以将
PTHREAD\u MUTEX\u STALLED
PTHREAD\u MUTEX\u ROBUST
设置为互斥。但是我认为我们不需要属性为
PTHREAD\u mutex\u STALLED
的互斥体,互斥体应该总是“健壮的”,这样我们就可以在锁定互斥体的一方死机时收到通知。如果互斥被“暂停”,我们将永远暂停

我知道Windows的互斥锁始终是“健壮的”,如果锁定互斥锁的一方死机,我们将收到错误通知。那么,在什么样的场景中,我们必须使用“暂停”互斥,而不是“健壮”互斥


感谢您的关注。

我看到了暂停互斥存在的以下原因:

  • 如果使用健壮的互斥体,那么每次尝试锁定互斥体时,都必须检查
    EOWNERDEAD
    。所以它需要额外的检查

  • 如果
    pthread\u mutex\u lock()
    返回
    eownerded
    ,则可能需要检查与该互斥体相关的共享对象的所有状态,并且必须通过调用
    pthread\u mutex\u lock()
    来恢复互斥体状态

  • 这是默认的互斥体属性。因此,应用程序无需调用:
    pthread\u mutexattr\u setrobust()

  • 历史:早期的pthread实现没有健壮的互斥锁


因此,只有当应用程序认为线程可能在持有互斥锁时意外死亡时,才需要进行上述所有附加检查,而大多数线程应用程序都不是这样设计的。因此,如果默认行为(暂停)足够或需要健壮的互斥,则应由应用程序决定。

如前所述,您的问题不清楚,除非您澄清您的问题,否则可能会被关闭。我希望我的编辑没有修改预期的问题。如果是,请回复。谢谢。但是在我的CentOS6.3 x64上,“健壮”不是默认属性。我是这么说的:stalled是默认属性。对不起,我误解了。