陳碩《Linux多執行緒服務端程式設計》中第二章使用shared ptr實現copy on write困惑?

時間 2021-05-31 10:15:44

1樓:mylife的無奈

前面大佬都說了,我覺得還有另一部分原因吧,書前面寫了,write端不需要擔心有人正在讀它,但困難的是,用智慧型指標時,一旦有其他執行緒讀,那麼引用計數就大於1,為了不擔心有人讀,這樣設計的好處就出來了。

第一,寫的時候一旦發現有人讀,讀的時候同時出現doit()使用者執行了寫,但用的是copy_and_swap這個連貫的動作(因為在鎖下執行),寫的是廢棄的版本,新的版本被寫端執行了複製交換,這樣就不用擔心讀的時候會寫,造成資料不一致。

第二,針對問題三,我個人覺得oldfoos只是把記憶體交給新的list_ptr,指向的還是原來的記憶體,在兩個臨界區外進行push依然有執行緒安全的問題(讀的時候不小心進行了寫操作)

最後說一句,樓主你測試要考慮到讀的執行緒可能出現寫的操作。。。

本人萌新!

2樓:靈劍

copy_on_write肯定是沒有辦法保證同時只有乙個執行緒寫的。如果希望在copy的時候不阻塞讀,可以給copy階段加乙個讀鎖。

後乙個問題,首先要理解copy_on_write的目標是中間任意乙個歷史版本都可以儲存起來,保證我指標指到的資料就是乙個永遠不會變的資料,每個試圖修改的人只是得到乙個修改過的副本。這和你的目標明顯是不太一樣的,我覺得適應你的目標的就是乙個簡單的讀寫鎖……double buffer通常是讀取消耗也很大,生成消耗也很大的時候的方案,修改hash表一般都是很快的操作。

3樓:六指

錯誤二是指讀的時候發生寫的中斷,導致讀到內容不一致。

錯誤三是指出現了讀的操作互斥,而本意應該是讀是並行的,但是寫時不能讀操作。

那麼你說的copy_on_write的方式好像理解錯了

STL多執行緒在linux環境下效能急劇下降,求解答?

用排除法 1 先排除多執行緒的問題。方法 在兩台機器上分別用單執行緒測試。2 排除檔案讀寫問題。方法 將taskThread裡面的任務替換成其它的純計算純記憶體操作。 egmkang wang 為什麼C getline讀取速度比C readline讀取速度慢這麼多?如何提高?egmkang wang...

關於多執行緒程式設計和CPU多核多執行緒的關係?

佐佐浪 具體到你的例子,修改優先順序和修改時間片是無法達到這個效果的。你需要做的是把你的計算部分做成並行的。單獨乙個執行緒是達不到你要的效果的。 棒子先生 首相我們了解下為什麼需要用到4核,這是由於不能盲目的提高CPU的主頻和頻寬,這樣會產生各種實際很難處理的問題,比如溫度飆公升等。舉例來說我們需要...

如何學會多執行緒工作?

dboy 你假設自己漂亮的大腦是個多核CPU,是很天真的。它不是,你是乙個人,有七情六慾,不是計算器,計算資源可以N等分水平擴充套件,但人腦不是,注意力是做好工作的必備資源,如果注意力可以隨意切分,就不會叫注意力了,太Sunny如果不能匯聚到一點是煮不開水的,光束再多也沒用。絕不多個主要目標齊頭並進...