當前位置:編程學習大全網 - 網站源碼 - 為什麽 壹個線程讀數據,壹個線程寫數據,要加鎖

為什麽 壹個線程讀數據,壹個線程寫數據,要加鎖

因為shared_ptr有兩個數據成員,讀寫操作不能原子化”使得多線程讀寫同壹個shared_ptr對象需要加鎖。這個在我看來顯而易見的結論似乎也有人抱有疑問,那將導致災難性的後果,值得我寫這篇文章。本文以boost::shared_ptr為例,與std::shared_ptr可能略有區別。shared_ptr的數據結構shared_ptr是引用計數型(referencecounting)智能指針,幾乎所有的實現都采用在堆(heap)上放個計數值(count)的法(除此之外理論上還有用循環鏈表的法,不過沒有實例)。具體來說,shared_ptr包含兩個成員,壹個是指向Foo的指針ptr,另壹個是ref_count指針(其類型不壹定是原始指針,有可能是class類型,但不影響這裏的討論),指向堆上的ref_count對象。ref_count對象有多個成員,其中deleter和allocator是可選的。

  • 上一篇:996美杜莎是那個平臺
  • 下一篇:郵箱的群發單顯功能是什麽?
  • copyright 2024編程學習大全網