使用C++我打算有一個producer
進程寫入數據vector
,然後幾個consumer
進程讀取數據。將有一個共享內存段(Boost :: Interprocess),其中將存儲數據vector
。問題是:我無法控制第三方應用程序啓動進程的順序,可能是consumer
可能在producer
生成任何數據之前啓動。有什麼機制可以協調進程,以便可以命令consumer
進程耐心等待,直到producer
表示數據準備就緒;不管流程啓動的順序如何?C++協調進程何時啓動?
0
A
回答
0
我猜命名信號量是個不錯的選擇。生產者和消費者應用程序應該同意(硬編碼)信號量的名稱,如/ tmp/mySem,並且只有生產者必須創建併發布信號量,而消費者應該等待信號量的存在和狀態。
0
相關問題
- 1. 從C++進程啓動Java進程
- 2. 發起啓動協調器
- 3. C#等待進程啓動
- 4. 啓動隱藏進程C#
- 5. C#同步進程啓動
- 6. 等待進程啓動C#
- 7. Docker - 進程不在啓動時啓動
- 8. 如何在作爲進程啓動時調試程序?
- 9. 如何在android中啓動程序時調用C程序?
- 10. 如何同時啓動兩個進程?
- 11. 如何在調試器啓動時附加第二個進程?
- 12. 如何在vmware啓動時調試linux進程?
- 13. 如何在Windows中啓動另一個進程時啓動進程?
- 14. 遠程進程啓動/關機的簡單協議
- 15. 啓動進程
- 16. 如何在服務器啓動時啓動守護進程
- 17. Visual Studio在應用程序啓動時進行遠程調試
- 18. 如何啓動其他父進程時死亡的進程?
- 19. gdb遠程調試C++進程通過ssh啓動:如何重定向stdin
- 20. Visual C++如何啓動應用程序以在遠程PC上進行調試?
- 21. 如何在啓動時啓動控制檯應用程序(!)? C#
- 22. 在C#中確認進程啓動
- 23. C#等待Progam /進程啓動
- 24. C#無法啓動系統EXE進程
- 25. C# - 在後臺啓動進程
- 26. C#進程啓動焦點問題
- 27. 獲取啓動進程的PID C++
- 28. C++進程啓動問題,路徑爲
- 29. Nvidia Nsight Eclipse版使用C/C++遠程啓動配置進行遠程調試
- 30. 無法啓動進程啓動失敗:超時等待應用程序啓動
感謝您的。你能提供一個如何建立和使用信號量的簡單例子嗎? – GoFaster
我在Boost文檔中看到,當一個post()操作發生在一個信號量上時,只有一個等待進程被喚醒。所有等待的線程怎麼會被喚醒,或者一起或者一個一個地喚醒? – GoFaster
也許你應該使用條件變量同步mchenizm而不是信號量。作爲互斥體的條件變量可以創建爲共享,然後您可以使用broadcast()API一次喚醒所有等待者。在PTHREAD庫中,您需要查找pthread_cond_init(),pthread_condattr_setpshared(),pthread_mutex_init()和pthread_cond_broadcast –