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



因为我想在进程之间有一个共享屏障,所以我使用shm_open, ftruncatemmap系统调用来创建一个共享内存并将其映射到一个屏障指针。

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. 对fd_barr
  3. 对应的文件描述符调用close
  4. 在文件名"/barrier"上调用shm_unlink

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

最新更新