我有需要傳達給不同網絡上的主機和喜歡的UI事件,從不同的插座各種網絡消息,定時器,事件反應的軟件項目...並行軟件設計
我的問題是我找不到一個令人滿意的解決方案來確保線程安全,同時仍提供非阻塞方法。我有很多類都依賴彼此,在我的想象中,我看到很多線程運行我的課程的方法不受控制的越野。所以我必須爲所有事情創建鎖。
我想通過添加太多的鎖,我的方法幾乎可以像阻塞鎖一樣產生錯誤,併產生像死鎖一樣的錯誤。
我需要使用.NET 3.5,但我很好奇什麼解決這個看起來像任何語言/框架(可能使用的.Net> 3.5將是解決辦法?)
起初我嘗試想象使用Begin ...()方法創建的線程流。所以我的第一個方法是定義一個充滿線程的手來維護我的應用程序的某個部分(例如Network thread,Event thread,...)。這樣,理論上我可以減少對鎖的需求,因爲資源只能綁定到他們唯一的一個線程。因爲那些線程必須關心不同的操作,所以我嘗試實現自己的事件隊列(請參閱How to implement a message pump in Non-UI thread in .NET?),但感覺就像.Net沒有爲此提供至少某種模式,可能會有更好的解決方案這些問題。
我一直在閱讀關於設計模式等的所有MSDN頁面,這有所幫助,但我仍然沒有看到整個圖片。
我認爲這是一般的.Net或併發編程中的常見情況。也許我只是沒有看到在我面前居住的解決方案。如果有的話,如果有人能指引我走向正確的方向,我會很高興。
這是一個複雜的話題,很難解釋。希望我能提供足夠的信息。如果有什麼不清楚的地方,請詢問。
謝謝你的幫助。
只需將您的資源設計爲演員(演員模型)即可。基本上,一個帶有郵箱(隊列)的單線程組件可以接收命令。 – plalx
爲什麼不發佈答案?感謝提示。關於演員模型的維基百科文章類似於我自己的想法。正如我在我的問題中所假設的那樣,類似的方法在.Net中似乎並不常見。雖然有第三方庫,我喜歡這種方法。 –
你需要消息/命令才能持久嗎?例如,如果UI執行一個動作,它是否絕對需要接收一個ACK,以確保即使系統停機,他的命令最終也會得到處理? – plalx