我需要将一些应用程序从
Windows移植到
Linux,它们使用共享内存和信号量.我必须替换一些Winddows函数,例如CreateFileMapping / OpenFileMapping和CreateSemaphore / OpenSemaphore.我稍后会为信号量和共享内存编写一个通用接口.
在Windows上,当所有句柄都关闭时,系统将删除资源(信号量或共享内存).但是,Unix要求我删除资源,使用shm_unlink(shm_open打开共享内存)和sem_unlink(sem_open打开信号量). shm_open很好,因为它不会在磁盘中创建真实文件.
我不能使用shmget,因为它需要一个数字作为标识符而不是字符串. ftok完全没用,因为它可能会产生碰撞.
在关闭所有句柄之前,我无法调用* _unlink,因为它不知道何时没有新进程需要它,并且进程可能会崩溃或可能被用户手动终止.
如果我不取消链接,他们将在系统中留下垃圾,如果进程组再次启动,他们将无法知道资源是否被其他进程使用或者是旧的(它没有取消链接,用户杀死了进程)或者过程崩溃了).
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。