我有兩個進程將運行,一個將從共享內存(mmap)讀取,另一個將寫入該共享內存(mmap)。這些進程分別在兩個不同的終端中啓動,但它們需要同步,以便在一個進程正在寫入時,它會在另一個進程從內存中讀取之前寫入全部數量。我所看到的與共享內存互斥鎖有關的所有帖子都從一個主程序中產生線程/進程。有什麼辦法可以創建一個共享的互斥鎖,可以被兩個獨立的程序使用嗎?C多進程訪問共享內存互斥鎖
0
A
回答
0
對不起,但你運氣不好。 Pthreads庫沒有'命名'互斥體的概念,所以兩個獨立的進程不能可靠地共享一個。
是的,您可以在共享內存中創建互斥鎖,並且可以在其他進程中使用此互斥鎖,但是您無法確保互斥體在第二個進程中通過第一個進程完全初始化。對於trully獨立程序,我強烈建議使用信號量。
0
您可以在mmap
ped文件中創建共享互斥鎖。如果您使用的是Linux並且擁有足夠新的內核,您甚至可以創建一個未鏈接的臨時文件mmap
它;初始化互斥量,然後只有link it to the final location。或者,您可以使用文件鎖定來拒絕對它的訪問,直到初始化完成。
pthread_mutexattr_init
POSIX manuals at linux.die.net的信號量示例在我的Linux 4.2.0-27 Ubuntu上確實有效。
相關問題
- 1. 1字節共享內存需要互斥鎖
- 2. Android中的進程共享互斥鎖和條件變量
- 3. C++ - 使用多進程共享內存
- 4. 鎖定互斥鎖vs訪問磁盤
- 5. 互斥多進程
- 6. C# - 鎖定互斥鎖問題
- 7. C++是互斥體鎖定共享資源的唯一方式
- 8. 使用互斥鎖從多個線程併發訪問向量
- 9. OpenCL-共享內存訪問
- 10. 當一個用戶崩潰時共享內存中的互斥鎖?
- 11. 共享內存併發算法與互斥鎖/信號量之間的關係
- 12. 由多個子進程鎖定互斥鎖
- 13. 跨進程使用互斥鎖
- 14. C內存共享問題
- 15. 與CUDA共享內存互斥 - 增加項目
- 16. std ::共享內存中的互斥量不工作
- 17. iPhone上的「互斥」和NSCondition的共享內存
- 18. 鎖定可共享內存
- 19. 進程共享內存不共享(c,linux)
- 20. C - 互斥鎖屬性
- 21. 互斥鎖和鎖
- 22. 使用許多互斥鎖
- 23. 將多進程池內循環(進程間共享內存)
- 24. 父進程無法訪問PyQt中的共享內存
- 25. 無法訪問在子進程中創建的共享內存
- 26. 父進程和子進程共享一個IPC共享內存
- 27. C#與多線程共享鎖
- 28. 高效的多線程共享訪問內存緩衝區
- 29. 如何創建可被多個進程訪問的共享內存段
- 30. pthread互斥體在共享內存中是否可以跨線程工作?
參見http://stackoverflow.com/q/2389353。 –
可能需要提高你的搜索技能。在stackoverflow之內和之外有很多答案。例如:[是否可以在Linux/UNIX上的多處理情況下使用互斥鎖?](http://stackoverflow.com/questions/9389730/is-it-possible-to-use-mutex-in-multiprocessing-case- on-linux-unix) – kaylum
@kaylum,因爲它並不能真正解決OP的問題 - 第一個進程需要在第二個進程讀取它之前在共享內存中創建互斥鎖,並且無法確保創建互斥鎖。 – SergeyA