让我们使用像shmget()这样的POSIX共享内存 - 一个通用调用来协调进程间通信。如何调用shmget()并协调共享内存段上的通信与Linux在单个进程中实现共享内存和线程之间的同步的方式不同。他们中的一个更轻?IPC与共享内存的共享内存有什么区别?
3
A
回答
3
SHM适用于多个进程中的IPC。在现代操作系统中,每个进程都无法看到彼此的内存空间。使用shmget()
的公共密钥获取共享内存,并使用shmat()
将共享内存页映射到每个进程内的本地内存地址。映射的共享内存地址可能会因不同的内存使用情况和共享库加载到每个进程空间而有所不同。 SHM键,尺寸是预定义的,并在这些过程中固定。
对于线程的内存,我们可能不会将其称为共享内存,因为线程全部在单个进程内存空间寻址中。他们可以在同一个进程空间中看到和读写。
2
老实说,不是很多。在Linux上,没有OS级别的线程。一个进程,一个线程。所以,当你使用pthreads时,你实际上使用了多个进程,除了线程特定的存储区域外,它们共享所有的内存。但是,在不同的UNIX上,如OSX,情况可能并非如此。但是,您可以亲自看到这一点,您可以制作一个简单的pthreads进程并对其进行背景处理,然后在shell提示符处键入ps
。
相关问题
- 1. 共享内存和IPC
- 2. GPU中共享内存和L1缓存有什么区别?
- 3. 缓存和共享有什么区别?
- 4. 使用共享内存的IPC
- 5. 内存共享
- 6. 父进程和子进程共享一个IPC共享内存
- 7. 通过共享内存进程之间共享指针IPC
- 8. 共享内存和处理Sempahores(IPC)
- 9. C - 获取IPC共享内存信息
- 10. IPC:共享内存死亡进程notfication
- 11. 共享内存:密钥和ID有什么区别?
- 12. 共享内存与码头
- 13. 云与共享内存
- 14. 共享内存IPC如何适应进程的内存布局?
- 15. CUDA共享内存
- 16. C共享内存
- 17. 在共享内存
- 18. RDMA内存共享
- 19. 共享内存段
- 20. Linux共享内存
- 21. 通过共享内存共享指针
- 22. IPC ::共享的共享
- 23. 共享内存IPC机制与API /系统调用调用的区别
- 24. IPC共享内存是否从堆中获取内存?
- 25. activerecord内存共享缓存
- 26. 共享内存段vs共享内存段
- 27. C++共享内存泄漏,如何清除共享内存?
- 28. 什么是覆盖共享内存?
- 29. 如何与shm_open共享现有内存?
- 30. 将共享库共享到共享内存