(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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章