1. 程式人生 > >讀muduo網絡庫筆記(2.8章)

讀muduo網絡庫筆記(2.8章)

多個 失敗 筆記 對象 http 繼續 linux多線程 分享 under

該筆記出自陳碩的《Linux多線程服務端編程》,作者比較註重版權問題,寫個讀後筆記應該沒什麽問題吧,如果有,會及時刪除,沒有的話繼續寫點筆記

--------------------------------------------

該書在2.8章介紹了copy-on-write的一種做法實例,解決了前文提到的幾個需要解決的問題。

第一版本的代碼:

技術分享

改版本代碼問題在於,如果在Foo::doit中調用了post函數會造成死鎖。(不過改bug容易定位)

copy-on-write版本代碼:

技術分享

技術分享

技術分享

這是正確的寫法,下面分析一下作者提供的錯誤的寫法。(自己以前的錯誤寫法就在作者列舉的例子中 -。-)

技術分享

錯誤原因:

錯誤一是會導致read端在遍歷的時候叠代器失效;

錯誤二是多個線程同時post,會出現某些線程的Foo對象添加失敗,因為copy的都是老的g_foos,並且各線程之間並不同步;

錯誤三導致的結果跟錯誤二相同,只是錯誤的姿勢不一樣。

讀muduo網絡庫筆記(2.8章)