該筆記出自陳碩的《Linux多線程服務端編程》,做者比較注重版權問題,寫個讀後筆記應該沒什麼問題吧,若是有,會及時刪除,沒有的話繼續寫點筆記編程
--------------------------------------------多線程
該書在2.8章介紹了copy-on-write的一種作法實例,解決了前文提到的幾個須要解決的問題。函數
初版本的代碼:post
改版本代碼問題在於,若是在Foo::doit中調用了post函數會形成死鎖。(不過改bug容易定位)spa
copy-on-write版本代碼:線程
這是正確的寫法,下面分析一下做者提供的錯誤的寫法。(本身之前的錯誤寫法就在做者列舉的例子中 -。-)對象
錯誤緣由:blog
錯誤一是會致使read端在遍歷的時候迭代器失效;同步
錯誤二是多個線程同時post,會出現某些線程的Foo對象添加失敗,由於copy的都是老的g_foos,而且各線程之間並不一樣步;it
錯誤三致使的結果跟錯誤二相同,只是錯誤的姿式不同。