1. 程式人生 > >muduo庫使用示例之聊天伺服器(下)

muduo庫使用示例之聊天伺服器(下)

借用shared_ptr實現copy on write

  1. shared_ptr是引用計數智慧指標,如果當前只有一個觀察者,那麼引用計數為1,可以用shared_ptr::unique()來判斷
  2. 對於共享資源有兩個端,分別是read端、write端
  3. 對於write端,如果發現引用計數為1(說明只有一個寫者訪問它),這時可以安全地修改物件,不必擔心有人在讀它
  4. 對於read端,在讀之前把引用計數加1,讀完之後減1,這樣可以保證在讀的期間其引用計數大於1,可以阻止併發寫
  5. 比較難的是,對於write端,如果發現引用計數大於1,該如何處理?既然要更新資料,肯定要加鎖,如果這時候其他執行緒正在讀,那麼不能在原來的資料上修改,得建立一個副本,在副本上修改,修改完了再替換。如果沒有使用者在讀,那麼可以直接修改