如何在进程之间正确释放共享内存?

时间:2015-07-15 20:06:50

标签: 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 个答案:

答案 0 :(得分:1)

  1. 致电该地区的munmap。
  2. 在与fd_barr
  3. 对应的文件描述符上调用close
  4. 在文件名“/ barrier”
  5. 上调用shm_unlink

    请注意,您可以在关闭前取消关联。这只会使共享内存不能通过文件系统名称访问。当 last 打开文件描述符关闭时,它将被释放。