2011-09-22 43 views
2

請原諒我,如果我錯過了一個明顯的答案,但我已經找到了這個,我找不到它。我正在嘗試構建一個儘可能少使用互斥鎖的多線程程序。以下是基本設計。我想知道如果我正在重新創建輪子,並且如果我是,我無意中借用了哪些設計模式/算法/方法?這是什麼設計模式?它與線程有關

我有一個全局對象,基本上是一堆線程的消息隊列。每當一個線程被創建時,它就會獲得一個函數來提交消息。只有線程可以訪問該功能。當一個消息被提交給該函數時,該對象將該消息放入隊列中。

這是一個FIFO隊列,基本上作爲共享內存進行線程間通信。事情是,只有全局對象才能添加或刪除消息。每個線程定期檢查隊列。每次找到它可以使用的消息時,它都會將消息複製到自身,然後向全局對象發送它讀取數據的信號。如果一個線程查看該消息並且不需要它,那麼它仍然表示它已經讀取了該消息,但它不會複製它。當每個線程查看數據時,全局對象將刪除該消息。

就是這樣。這是基本的。它吃掉了記憶。它只是爲了避免鎖定變量等。

+1

如果你仔細想一想,你會發現你需要某種同步和原子變量。你如何「表示你閱讀信息」?你如何跟蹤誰閱讀了一條消息?細節決定成敗。 –

+0

+1在標題中給出線索設計模式的內容。關於設計模式的問題很少見,請參閱相關列表。 – piokuc

回答