我想使用lock-free algorithm作为共享内存,以避免互斥。我有一些共享数据的进程使用共享内存。如果一个进程正在锁定互斥对象并崩溃,所有其他进程也会崩溃。
我读了一些用链表实现无锁算法的论文。但是在我的共享内存中,我不能定义用于这个内存块的数据结构。我只有一个指向这个街区的指针。
所以我对在我的情况下应用无锁算法没有任何想法。我需要你的帮助。如果我的英语很差的话,谢谢和抱歉。
发布于 2012-09-06 08:33:02
如果一个进程正在锁定互斥对象并崩溃,所有其他进程也会崩溃。
特别是对于这个用例,有鲁棒互斥
PTHREAD_MUTEX_ROBUST 如果包含鲁棒互斥锁的拥有线程的进程在保持互斥锁时终止,则获取互斥锁的下一个线程将被来自锁定函数的返回值EOWNERDEAD通知终止。如果鲁棒互斥锁的拥有线程在保持互斥锁时终止,则获取互斥锁的下一个线程可能会被返回值EOWNERDEAD通知终止。然后,通过调用pthread_mutex_consistent(),通知线程可以尝试将互斥保护的状态标记为一致。在随后成功调用pthread_mutex_unlock()之后,互斥锁将被释放,其他线程可以正常使用。如果在不调用pthread_mutex_consistent()的情况下解除互斥锁,则它将处于永久不可用状态,所有锁定互斥锁的尝试都将失败,错误为ENOTRECOVERABLE。在这样一个互斥体上唯一允许的操作是pthread_mutex_destroy()。
https://stackoverflow.com/questions/12295471
复制相似问题