4

我想使用lock-free algorithm共享内存来避免互斥锁。我有一些共享数据的进程使用共享内存。如果一个进程正在锁定互斥体并崩溃,那么所有其他进程也会崩溃。

我阅读了一些使用链表实现无锁算法的论文。但是在我的共享内存中,我无法定义在这块内存上使用的数据结构。我只有一个指向这个块的指针。

所以我对在我的情况下应用无锁算法没有任何想法。我需要你的帮助。如果我的英语很差,谢谢和抱歉。

4

1 回答 1

1

如果一个进程正在锁定互斥体并崩溃,那么所有其他进程也会崩溃。

特别是对于这个用例,有强大的互斥锁

PTHREAD_MUTEX_ROBUST

如果包含健壮互斥锁的拥有线程的进程在持有互斥锁时终止,则应通过锁定函数的返回值 [EOWNERDEAD] 通知获取互斥锁的下一个线程终止。如果一个健壮的互斥锁的拥有线程在持有互斥锁的同时终止,则可以通过返回值 [EOWNERDEAD] 通知下一个获取该互斥锁的线程。然后,被通知的线程可以尝试通过调用 pthread_mutex_consistent() 再次将受互斥锁保护的状态标记为一致。后续调用pthread_mutex_unlock()成功后,互斥锁将被释放,其他线程可以正常使用。如果互斥锁在没有调用 pthread_mutex_consistent() 的情况下被解锁,它应处于永久不可用状态,并且所有锁定互斥锁的尝试都将失败并出现错误 [ENOTRECOVERABLE]。这种互斥体上唯一允许的操作是 pthread_mutex_destroy()。

于 2012-09-06T08:33:02.140 回答