TLS 线程局部存储

时间:2014-05-21 16:45:55   收藏:0   阅读:339

TLS(Thread Local Storage) 线程局部存储


 所有的线程都共享着进程的虚拟地址~ 局部变量为每个线程所独立共享的,静态变量和全局变量是进程中所有线程一起共享的~ TLS可以为线程提供一个唯一的数据用一个全局的索引~每个线程 有自己的副本~各个线程互不影响~其实所保存的数据就是线程关联的~

先看个图:

bubuko.com,布布扣

如图可见每个线程有自己独立的TLS表格,相当于一个数组,数组里保存着void *类型的数据~ 表格的大小TLS_MINIMUM_AVAILABLE 定义的~ 微软定义在系统中最小不得少于64,最大每个进程1088项

线程的TLS数据其实保存在线程的TEB中 偏移地址为0xe10 

bubuko.com,布布扣

使用TLS涉及到四个函数


    创建线程的时候(_beginthreadex)有使用到TLS用来保存线程相关的数据(CreateThread和_beginthreadex区别就是在这个地方),使得多线程时的C函数可以正确运行保证~线程安全~





TLS 线程局部存储,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!