博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(P18)muduo_base库源码分析:线程特定数据,ThreadLocal类的封装
阅读量:4299 次
发布时间:2019-05-27

本文共 808 字,大约阅读时间需要 2 分钟。

文章目录

1.线程特定数据

  • 在单线程程序中,我们经常要用到"全局变量"以实现多个函数间共享数据。

  • 在多线程环境下,由于数据空间是共享的,因此全局变量也为所有线程所共有。

  • 但有时应用程序设计中有必要提供线程私有的全局变量,仅在某个线程中有效,但却可以跨多个函数访问。

  • POSIX线程库通过维护一定的数据结构来解决这个问题,这个些数据称为(Thread-specific Data,或 TSD)。

  • 线程特定数据也称为线程本地存储TLS(Thread-local storage)

  • 对于POD类型的线程本地存储,可以用__thread关键字

  • 线程特定数据的接口如下

pthread_key_create一旦一个线程创建了一个key,其他线程都有这个keypthread_key_delete删除key,并不是删除数据;删除数据需要在pthread_key_create时,指定一个回调函数去销毁,因为这个数据是堆上数据pthread_getspecific获取不同的线程可以通过这个key来访问这个数据pthread_setspecific为特定的线程指定特定的数据,这些实际数据就是线程所私有的
  • TSD图例如下
    在这里插入图片描述

2.ThreadLocal类的封装

  • 线程本地存储,ThreadLocal类的封装

    在这里插入图片描述

  • eg:src\18\jmuduo\muduo\base\ThreadLocal.h

  • eg测试:src\18\jmuduo\muduo\base\tests\ThreadLocal_test.cc

  • 测试:

    在这里插入图片描述
    解释如下:子线程运行完毕,2个TSD对象就被销毁了
    在这里插入图片描述

  • eg测试:src\18\jmuduo\muduo\base\tests\SingletonThreadLocal_test.cc

    src\18\jmuduo\muduo\base\tests\CMakeLists.txt

  • 测试:

    在这里插入图片描述
    每个线程的TSD对象的地址都是不一样的。
    在这里插入图片描述

转载地址:http://jmiws.baihongyu.com/

你可能感兴趣的文章
python filter/map/reduce
查看>>
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED解决方法
查看>>
python获得两个数组交集、并集、差集的方法
查看>>
Routes RoutesMiddleware
查看>>
Webob WSGI 装饰器
查看>>
Python 虚拟环境:Virtualenv
查看>>
python celery(任务调度器)
查看>>
python相关资料分享
查看>>
python beautifulsoup多线程分析抓取网页
查看>>
python queue模块
查看>>
python threading多线程模块
查看>>
HTML中的块元素(block)
查看>>
css 中div class
查看>>
a:link,a:visited,a:hover,a:active
查看>>
任务调度利器-Celery
查看>>
AMQP消息服务器RabbitMQ
查看>>
python
查看>>
python爬图片
查看>>
解决安装gevnet失败
查看>>
关于shell文件中出现syntax error: unexpected end of file
查看>>