2012-03-09 44 views
2

在一個進程中有幾個進程和一些線程。所有的流程都需要相互交流。一個進程中的線程需要與進程交互(主線程)。我想知道如果這個設計作品:請註釋,如果這適用於進程和線程之間的通信

  1. 每一道工序都有MSG隊列(使用msgget()的msgsnd,msgrcv()),以便它們可以被Linux API互相交談。

  2. 每個線程都有一個msg隊列(也使用msgget,msgsnd,msgrcv),以便它可以與主線程和其他線程交談。所以,這個線程駐留的進程將擁有進程隊列和線程隊列,是否有任何問題?

我很擔心項目2,因爲我學到的是msgget,msgsnd,msgrcv用於進程間通信。我閱讀有關這些功能的手冊。看起來沒有提及這些功能是否支持線程。另外,請你參考一下最好的在線Linux/Unix手冊嗎?我不擅長它,因爲我覺得很難找到我想要的東西,如果函數或信號量可以支持線程/手動。愚蠢的問題, :)。

請幫助。謝謝。

回答

1

所以,這個線程駐留的進程將有進程隊列和線程的隊列,是否有任何問題?

不是沒有問題,每個消息隊列由唯一的隊列ID標識,並且線程或進程可以提供此隊列標識的任何人都可以訪問消息隊列。

如果它給了你任何的安慰,我已經使用消息隊列的線程上下文切換完美無瑕,所以要放心它的作品。


它通常是最好只man在你的Unix/Linux安裝,但既然你問了在線資源,您可以參考Online Linux Man pages以供參考。

+0

感謝您的快速響應。我很擔心操作系統如何一次識別哪個進程/線程擁有此隊列ID,因爲此消息隊列函數總是在IPC部分提及。也許我正在過度看待它。 :) 再次感謝。 – 2012-03-09 03:22:08