请问xtang有关shm_unlink的问题

多个进程公用一段共享内存,当每个进程退出时都要调用shm_unlink么,还是只要一个进程调用即可。
我看了帮助文档,shm_unlink只是递减引用计数,只有计数为零时才销毁该内存,所以我每次都调用了该函数,这样就出问题了,只要有一个进程调用shm_unlink,内存就会被销毁,其他进程调用shm_unlink就出错。
不知道我有没有说清楚。

shm_unlink()只要一个进程调用。

递减的是对共享内存的引用计数,不是shm_unlink()的。也就是说,shm_unlink()以后,名字不存在了(没人可以再shm_open()了)。但内存还在,已经mmap()过的进程依然可以使用这块内存。只有当所有的进程都unmap()那块内存后,内存才会被收回。

到过来,如果不shm_unlink()的话,即使引用计数为零,所有进程都unmap()了共享内存,那块内存还是被保留着,系统不会自动清理。

那我可以得到引用计数么

我没试过,不过fstat()一下,那个nlink可能是引用计数。

你要引用计数干什么?

谢谢!!!!