我们对单个进程中多个线程访问的共享数据非常熟悉。但是,我们怎样才能让多个进程共享一块内存呢?如何创建可被多个进程访问的共享内存段
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. 多个线程可以同时访问共享内存吗?
- 6. 多个JVM进程可以共享公共类的内存吗?
- 7. C多进程访问共享内存互斥锁
- 8. 由MPI创建的进程的共享内存访问控制机制
- 9. 如何在fork或子进程之后创建共享内存?
- 10. 父进程和子进程共享一个IPC共享内存
- 11. OpenCL-共享内存访问
- 12. Node.js线程共享内存访问
- 13. 跨线程共享内存访问
- 14. 确定哪个进程在Windows中创建共享内存
- 15. 多进程python与共享内存
- 16. C++ - 使用多进程共享内存
- 17. 如何使用shmget跨多个进程共享一块内存
- 18. 多个进程可以共享堆内存吗?
- 19. 进程间通信:共享内存vs线程对象访问
- 20. 如何在共享内存段中创建apr_table_t类型的表?
- 21. 父进程无法访问PyQt中的共享内存
- 22. 进程VS线程:两个进程可以共享相同的共享内存吗?可以两个线程?
- 23. CUDA非法内存访问可能'不足'的共享内存
- 24. 高效的多线程共享访问内存缓冲区
- 25. boost进程间共享内存:如何在同一台机器上有多个不同的共享内存
- 26. 将多进程池内循环(进程间共享内存)
- 27. 拒绝从非分叉进程访问共享内存
- 28. 共享内存段
- 29. 在许多核心系统中如何访问共享内存
- 30. 共享内存IPC如何适应进程的内存布局?
谷歌有一堆东西在上面。您正在寻找'/ 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