加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

如何使用线程局部存储实现多线程下的日志系统

发布时间:2016-09-28 19:58:40 所属栏目:Unix 来源:站长网
导读:副标题#e# 概述 通常来说,在应用程序中需要日志来记录程序运行的状态,以便后期问题的跟踪定位。在日志系统的设计中,通常会有一个总的日志系统来统一协调这些日志的设置如位置、输出级别和内容等。在多线程编程中,当每个线程都需要输出日志时,因为要考

清单 7. boost::thread_specific_ptr 在 windows 下的调用栈

boost::thread_specific_ptr::reset()
  --> boost::detail::set_tss_data()
  --> boost::detail::get_or_make_current_thread_data()
  --> boost::detail::get_current_thread_data()
  --> ::TlsGetValue()
    
# reference:
# ${BOOST_SRC}/boost/thread/tss.hpp
# ${BOOST_SRC}/lib/thread/src/win32/thread.cpp

清单 8. boost::thread_specific_ptr 在 Linux 下的调用栈

boost::thread_specific_ptr::reset()
  --> boost::detail::set_tss_data()
  --> boost::detail::add_new_tss_node()
  --> boost::detail::get_or_make_current_thread_data()
  --> boost::detail::get_current_thread_data()
  --> ::pthread_getspecific()
    
# reference:
# ${BOOST_SRC}/boost/thread/tss.hpp
# ${BOOST_SRC}/lib/thread/src/pthread/thread.cpp

在两个平台下,最后分别都调用了系统 API 来实现线程局部存储。相关的数据结构可以参考 boost 的源代码。

总结

本文通过描述了一个使用 boost::thread_specific_ptr 的线程局部存储变量实现的一个简洁的多线程日志系统。内容包括了日志系统概述,相关的背景介绍,该日志系统的代码示例以及优势等等。该日志系统是一个线程级别的单例日志系统,具有管理简单高效,特别是对已有的不能支持多线程的单例日志系统提供了一个很好的改造思路,使用线程局部存储变量可以不用改变原来日志系统的业务接口。

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读