共享内存Reader(只读)在Writer终止时挂起

时间:2011-05-24 17:32:24

标签: c memory shared writer

在linux,C中,使用共享内存,我有一个Writer进程和许多读者。

当Writer终止时,任何正在运行的读者都会挂起。当Writer终止时,它会执行shm_unlink。

我认为,可能是错误的,内核知道读者并且他们可以继续阅读。当然数据不会改变,因此读者可以知道何时优雅地结束。

任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以在共享内存中创建的标头中包含一个标志,以指示EOF。您可以定期更新时间戳以检测编写者的不干净终止/

您还可以使用shmctl查找附加人数,这可能会帮助您确定作者是否已离开。

您还可以尝试重新附加/ fstat以验证该段尚未删除。

如果这些答案不满足,请告诉我们它是POSIX还是System V共享内存。

答案 1 :(得分:0)

在linux中,内核不了解您的读者或作者(或者,它不知道哪个是哪个)。 shm_unlink只删除了名字;在所有用户都未映射并关闭或终止之前,它不会删除shmem段。如果你让这些读者/作者通过pshared互斥量/信号量进行通信和阻止,那么当作者死亡时,你最终可能会挂起读者。最好让作者在队列中留言告诉读者它正在终止。