(Boost)thread_specific_ptr

原文:http://www.kingofcoders.com/viewNews.php?type=newsCpp&id=187&number=6571825070

在每個線程中,都各自new一個對象交給全局的threah_specific_ptr進行管理,當線程退出後,他會自動釋放這個對象,這一點與shared_ptr非常相似。thread_specific_ptr代表了一個全局的變量,而在每個線程中都各自new一個線程本地的對象交給它進行管理,這樣,各個線程就可以各自獨立地訪問這個全局變量的本地存儲版本,線程之間就不會因爲訪問同一全局對象而引起資源競爭導致性能下降。而線程結束時,這個資源會被自動釋放。

thread_specific_ptr代表了某個全局變量的本地存儲,各個線程可以各自獨立地通過它訪問這個全局變量的本地副本,起到了井水不犯河水的效果。

我們來看一個實際的例子,假如我們要爲一個多線程的程序添加一個記錄日誌的功能,記錄程序的運行情況。通常的做法是,建立一個全局的日誌對象,然後各個線程相互競爭地訪問這個全局對象,將日誌消息添加到全局的日誌對象中,在這個過程中,涉及共享資源的競爭,必然會影響效率。採用線程本地存儲,我們爲每個線程創建一個各自獨立的日誌對象,並交由一個全局的thread_specific_ptr進行管理,在各個線程中,可以通過這個thread_specific_ptr獨立地訪問各自線程的日誌對象,最後在線程退出的時候,我們再將各個線程的獨自記錄的日誌合併到一起,就成了完整的日誌。在這個過程中,各個線程通過thread_specific_ptr管理的多個日誌對象,各自獨立,井水不犯河水,整個過程沒有共享資源的競爭,自然可以提高效率。

發佈了32 篇原創文章 · 獲贊 51 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章