2012-03-08 233 views
3

我有3個關於線程和進程通信的問題。消息隊列是否支持多線程?

  1. 可以在Linux功能msgget()的msgsnd()和msgrcv()被多個線程在一個進程中調用?這些函數在不同的線程中試圖訪問(r/w)一個進程的消息隊列。所有的比賽條件都應該由體系來照顧嗎?如果沒有,是否有任何好的方法來支持線程並向其主線程(進程)發送消息?

  2. 可以使用semop()函數來同步一個進程中的線程嗎?

  3. 有一個共享內存有以下實體可以訪問。

    • 過程
    • 多個線程在一個進程。 我是否必須同時使用進程間級別的信號量和線程級別爲的信號量?任何簡單的方法來處理這個?

很多問題。 :) 謝謝。

回答

2

在一個進程中,多個線程可以調用Linux函數msgget(),msgsnd()和msgrcv()嗎?

你不需要擔心競爭條件,系統會照顧到這一點,這些調用沒有競爭條件。

可以使用semop()函數來同步一個進程中的線程嗎?

是的,更多的documentation

我一定要使用進程間水平的信號量和線程級信號燈?

這是線程或進程在全球範圍內共享的任何資源是受比賽由於一個或多個線程或試圖在同樣的時間來訪問它的進程引起的,所以,你需要訪問這些共享同步全球資源。