首先我試圖做一些解釋:多線程用C鏈表++
我的計劃是寫一個程序,一個套接字流使用它來實現的解析器將資料提供了boost :: ASIO庫實現使用boost:spirit :: qi。解析器將獲取數據包並填充數據包對象,然後將該對象追加到數據包對象鏈表的末尾。數據包處理器將讀取列表中的第一個對象並執行處理,然後移到下一個項目並刪除第一個項目。
我決定使用一個鏈表,因爲如果我使用了一個std ::隊列,我將不得不鎖定整個容器,每當流添加一個數據包或處理器刪除一個會使兩個線程運行更多或不太系列,我想避免。此外,隊列類有一個複製整個對象的趨勢,而鏈表概念有一個創建對象的好處,然後指向它。爲了避免序列化整個業務,我打算在每個節點中放置boost:mutex互斥鎖,並從那裏鎖定它們。這個想法是讓套接字流創建列表並立即鎖定第一個節點,從解析器填充節點,創建下一個節點並鎖定它,然後解鎖第一個節點並轉到下一個節點上工作。這樣一來,從來就沒有一個解鎖的節點懸在末尾,數據包處理器可能跳到並在套接字流鼻子下刪除。數據包處理器將檢查第一個節點並嘗試鎖定它,如果它鎖定它,則它將執行處理,然後解鎖它,獲取下一個節點,然後刪除第一個節點。這種串行化被限制在分組處理器已經追上套接字流類的那些時間。
所以現在我的問題是,在我做實際執行這項工作之前,這聽起來像一個好主意嗎?我試過它在一個簡單的測試,它似乎工作正常,我不能想到任何嚴重的問題,只要我實現異常處理並注意釋放我分配的任何內存,但如果任何人都可以想到我忽略了這個想法的任何問題,我將不勝感激。此外,我希望任何其他建議任何人可能作爲替代或可能使這個想法更好地工作。
在此先感謝!
非常棒的文章,謝謝!我認爲這會非常有幫助。 – jacobkaulike