c - 如何正确地释放进程之间的共享内存?

标签 c multithreading unix posix shared-memory

由于我希望在进程之间建立共享屏障,因此我使用 shm_openftruncatemmap 系统调用来创建共享内存并将其映射到屏障指针。

int status, fd_barr;
fd_barr = shm_open("/barrier", O_RDWR | O_CREAT, 0777);
status = ftruncate(fd_barr, sizeof(pthread_barrier_t));
barrier = mmap(0, sizeof(pthread_barrier_t), PROT_READ | PROT_WRITE, MAP_SHARED, fd_barr, 0);

一切正常!我的问题是在销毁我的屏障指针后,我应该如何正确地释放共享内存?如何使用 shm_unlinkclose(fd) 函数?我应该先调用哪一个?我可以在 mmap 之后立即调用哪一个,以及应该在程序的最后调用哪一个?

最佳答案

  1. 调用该区域的 munmap。
  2. 调用 close 对应于 fd_barr 的文件描述符
  3. 对文件名“/barrier”调用 shm_unlink

请注意,您可以在关闭之前取消链接。这只会使共享内存无法通过文件系统名称访问。当最后打开的文件描述符被关闭时,它将被释放。

关于c - 如何正确地释放进程之间的共享内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440019/

相关文章:

c++ - Bison 警告 : Empty rule for typed nonterminal

c# - MVVM 中的后台线程进度通知?

iphone - NSOperation 中的 NSURLConnection 同步方法

iphone - 在同一后台线程上运行FMDB进程?

macos - 通过终端复制文件列表

linux - 从文件中随机选择行而不用 Unix 啜饮它

bash - 使用 Sed 搜索/替换 Bash 脚本中的变量

java - 返回和访问 jna 中结构对象的数组

c - 如何在 linux 上查看 wordsize

使用 arduino IDE 自定义延迟功能