我们对单个进程中多个线程访问的共享数据非常熟悉。但是,我们怎样才能让多个进程共享一块内存呢?如何创建可被多个进程访问的共享内存段
1
A
回答
1
你想要的程序是mmap
,它接受一个文件描述符,并返回一个指向一块内存的指针。多个进程然后都使用相同的文件名来获得它。当然,你需要协调阅读/写作,以便没有人需要处理损坏的数据。
文件名可以是文件系统中实际文件的文件名,也可以是传递给shm_open
的名称。
其实,这取决于你想要做什么。如果您只需要fork()
来创建额外的进程,则子进程会与父进程共享内存,并带有某些(记录的)异常。除非,直到你致电exec()
。然而,使用fork()
而不使用exec()
可能导致无数的头痛,除了简单情况外,不应该这样做。
1
见shm_overview(7)
的细节,但这里的功能的快速破败调用创建/删除匿名内存映射:
shm_open(2)
创建和/或连接到共享内存,并得到一个文件描述符为它- 可选
ftruncate(2)
创建 mmap(2)
当对共享存储器映射到你的进程的地址空间中设置的存储器段的大小munmap(2)
以除去从进程的地址空间shm_unlink(3)
映射删除共享存储器段
0
相关问题
- 1. 从一个进程创建多个共享内存段
- 2. 无法访问在子进程中创建的共享内存
- 3. 从一个进程创建多个共享内存
- 4. 创建多于6个子进程的共享内存出错
- 5. C多进程访问共享内存互斥锁
- 6. 如何在fork或子进程之后创建共享内存?
- 7. 父进程和子进程共享一个IPC共享内存
- 8. OpenCL-共享内存访问
- 9. C++ - 使用多进程共享内存
- 10. 多个进程可以共享堆内存吗?
- 11. 如何在共享内存段中创建apr_table_t类型的表?
- 12. 进程VS线程:两个进程可以共享相同的共享内存吗?可以两个线程?
- 13. 父进程无法访问PyQt中的共享内存
- 14. CUDA非法内存访问可能'不足'的共享内存
- 15. 高效的多线程共享访问内存缓冲区
- 16. 将多进程池内循环(进程间共享内存)
- 17. 共享内存段
- 18. 在许多核心系统中如何访问共享内存
- 19. 可以两个进程共享相同的GPU内存吗? (CUDA)
- 20. 访问控制共享内存
- 21. Multicores:同时访问共享内存
- 22. 无法访问共享内存
- 23. 原子访问共享内存
- 24. 共享内存主/从程序访问单个串口
- 25. AS3共享对象可以被多个应用程序访问吗?
- 26. 共享内存矩阵乘法涉及多个进程
- 27. 如何在两个进程之间协调共享内存
- 28. 在32位和64位进程之间共享共享内存段
- 29. Win CE:创建命名共享内存
- 30. 创建共享内存时出错
谷歌有一堆东西在上面。您正在寻找'/ dev/shm'''shmget'手册页以及与它们相关的所有内容。附: POSIX定义的接口当然是C. – TC1 2012-04-09 13:01:13
可能的重复[如何在Linux中的许多应用程序库中有一个共享变量?](http://stackoverflow.com/questions/1938244/how-to-have-a -shared-variable-in-library -in-many-applications-in-linux) – 2012-04-09 13:03:00
请记住,你必须小心地同步对共享内存的访问。使用更多结构化的机制(如管道和信号灯)可能更容易。它可能也值得一看[Boost.Interprocess](http://www.boost.org/doc/libs/1_49_0)。 – 2012-04-09 13:32:33