簡體   English   中英

多進程讀/寫的一個 system v 消息隊列的問題

[英]Issue with one system v message queue for multiple process read/write

我正在開發一個服務器程序,該程序通過多個子進程為多個客戶端提供服務。 我只使用一個 System V 消息隊列在父進程和子進程之間進行通信。 每個進程將等待 mtype 等於進程 ID 的消息。 每個子進程只與父進程通信。 在父進程中,我使用標志 IPC_NOWAIT 調用 msgrcv 以防止被阻止處理其他內容。 有 2 個子進程時,它按預期工作,但是當子進程數量增加時,會出現以下問題:

  • 如果我將 msgsnd 上的標志設置為 IPC_NOWAIT,則某些子進程無法向父進程發送消息,錯誤為 EAGAIN。 如果我添加機制來重新發送帶有這種錯誤的消息,它仍然會失敗並且父進程不會收到消息。
  • 如果我從 IPC_NOWAIT 取消設置 msgsnd 上的標志,則在此對 msgsnd 函數的調用中將阻止某些子進程。 父進程沒有收到任何消息。

所以:

  • 我該如何解決這個問題?
  • 如果沒有,你能推薦我一個架構師來解決我的問題嗎?

我的系統是 Centos 7。消息大小為 300 字節。

代碼沒有給出。 最好是檢查失敗的返回值並參考手冊頁。 在 gdb 上,您可以單步執行到子進程無法發送消息的位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM