如何在进程之间正确释放共享内存?
How to correctly deallocate a shared memory between processes?
因为我想在进程之间有一个共享屏障,我使用 shm_open
、ftruncate
和 mmap
系统调用来创建共享内存并将其映射到屏障指针。
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_unlink
和 close(fd)
函数?我应该先打电话给哪个?我可以在 mmap
之后立即调用哪个,我应该在程序的最后调用哪个?
- 对该区域调用 munmap。
- 在对应于 fd_barr
的文件描述符上调用关闭
- 在文件名“/barrier”上调用 shm_unlink
请注意,您可以在关闭前取消链接。这只会使共享内存无法通过文件系统名称访问。它会在 last 打开的文件描述符关闭时被释放。
因为我想在进程之间有一个共享屏障,我使用 shm_open
、ftruncate
和 mmap
系统调用来创建共享内存并将其映射到屏障指针。
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_unlink
和 close(fd)
函数?我应该先打电话给哪个?我可以在 mmap
之后立即调用哪个,我应该在程序的最后调用哪个?
- 对该区域调用 munmap。
- 在对应于 fd_barr 的文件描述符上调用关闭
- 在文件名“/barrier”上调用 shm_unlink
请注意,您可以在关闭前取消链接。这只会使共享内存无法通过文件系统名称访问。它会在 last 打开的文件描述符关闭时被释放。