对共享内存使用无锁算法

时间:2012-09-06 08:00:02

标签: c++ ipc shared-memory lock-free

我想将lock-free algorithm用于共享内存以避免互斥锁。我有一些共享数据的进程使用共享内存。如果进程锁定互斥锁并崩溃,则所有其他进程也会崩溃。

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

所以我对在我的情况下应用无锁算法没有任何想法。我需要你的一些帮助。如果我的英语非常糟糕,谢谢,对不起。

1 个答案:

答案 0 :(得分:1)

  

如果进程锁定互斥锁并崩溃,则所有其他进程也会崩溃。

特别针对此用例,有robust mutexes

  

PTHREAD_MUTEX_ROBUST

     

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