讓我們使用像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. 將共享庫共享到共享內存