我試圖實現一個有生產者和N(N> = 1)個工人的程序。他們使用消息隊列進行通信。 這個想法是生產者發送隊列「任務」。工作人員通過msgrcv()調用來獲取任務並執行一些代碼。在工作人員完成任務之後,它將計算結果發送到隊列。製片人會收到此訊息並保存結果。在進程之間同步消息隊列
我正在使用POSIX消息隊列,並且生產者和工作者同時工作。
這個程序背後的問題是存在一個危及通信的場景。 每條消息的大小約爲5000字節。在UNIX系統中,最大隊列大小爲〜16000字節。
該場景是:隊列中有3個任務(5000 * 3 = 15000字節)。某些工作人員從隊列中獲取一條消息(現在該隊列有10000個字節)。工作人員開始執行任務,並且由於工作人員必須在每個任務中處理的字節數量,生產者會向隊列發送另一條消息(隊列現在已滿)。 現在任務完成後,工作人員嘗試將結果發送到隊列並被阻塞(隊列已滿)。生產者試圖將另一個任務發送到隊列並被阻塞。
如果我只用一個工人運行這個程序,這種情況發生的可能性很大。
有沒有人有一個想法,以避免這種情況?
我會考慮使用沒有這些限制的消息排隊機制,而不是使用某些看起來根本不適合您的用例的東西。 (除非你很難要求使用POSIX MQ)。也許ZeroMQ--我相信它可以作爲一個輕量級嵌入式庫。 – millimoose
謝謝你的快速回答。是的,在這種情況下,我必須使用POSIX MQ。 –
在一個程序或多個進程中使用多個線程嗎? – Dmitri