我正在阅读APUE第12章(第三版),它说:我们可以设置PTHREAD_MUTEX_STALLED或PTHREAD_MUTEX_ROBUST到互斥量。 但是我不认为我们需要使用属性PTHREAD_MUTEX_STALLED互斥,互斥量应该总是“健壮的”,这样我们才能被通知,如果locking互斥量的那一边是死的。 如果互斥体“停滞”,我们将永远悬浮。
而且我知道Windows的互斥体总是“健壮”,如果locking互斥体的那一面死了,我们将会收到错误WAIT_ABANDONED通知。 那么,在什么样的情况下,我们不得不使用“停滞”的互斥体,而不是“健壮的”互斥体呢?
感谢您的关注。
创build互斥锁时,“找不到path的一部分”错误
两个进程之间使用互斥体共享内存但缺less数据
通缉:不受AbandonedMutexException影响的跨进程同步
Linux pthread互斥和内核调度程序
有人可以解释互斥和如何使用?
Mac OS X中Windows命名互斥体的等价物?
Windows互斥对象和信号量
在进程间使用互斥锁
分布式locking机制.NET
公平的关键部分(Linux)
我发现停滞互斥体存在的原因如下:
如果使用健壮的互斥锁,那么每次尝试锁定互斥锁时,都必须检查EOWNERDEAD 。 所以它需要额外的检查。
如果EOWNERDEAD由pthread_mutex_lock()返回,那么您可能需要检查与该互斥体相关的所有共享对象的状态,并且必须通过调用pthread_mutex_lock()来恢复互斥体状态。
这是默认的互斥体属性。 因此,不需要应用程序调用: pthread_mutexattr_setrobust() 。
历史:早期的pthread实现没有强大的互斥体。
所以,上述所有附加检查只有在应用程序认为某个线程在持有互斥体时意外死亡,而不是多数线程化应用程序的设计时才需要。 因此,如果缺省行为(停顿)足够或者需要健壮的互斥锁,则这是应用程序的决定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。