下你所需,载你所想!
汇集开发技术源码资料

MultiThread玩具自动退出许可区和线程TLS

:13.447KB :1 :2022-10-03 16:45:35

部分简介

新加了一个类 autolock
利用子程序结束时 会自动释放类对象 所以在类的释放函数中 增加了一句退出许可区 这样就永远不用去手动退出许可区了
唯一的缺点: 如果子程序的代码太多 会损失一些运行效率

还有一个类线程TLS

Tls 全名是 thread loacl storage 即 "线程 本地 存储"

首先得知道一点 全部线程都是共享在同一片地址空间上
当一个变量是全局或者静态时 A线程对这个变量进行了修改 全部线程的变量的会被修改 有一些时候 我是不希望这样的

对于这种情况有两种解决方法:
1. 自写一个表 通过判断线程ID 来取对应的数据
2. 线程本地存储
当前系统创建一个线程的 会分配一个TLS数组 并全部初始化为0 之后系统把TLS数组和线程关联起来
那么就是每个线程都有自己TLS数组 数组中的每个元素都能保存一个32位的值

假设我创建了一个A线程
如果我要使用这个数组那么就要使用TlsAlloc来判断 判断哪个元素可以用
到这里我已经获取到了 tls数组 的索引 接下来就应该使用TlsSetVaule

TlsSetVaule 函数 参数有两个 一个是索引 一个是要设置的32位值 值是什么不重要 可以是1 2 3 也可以是一个内存的地址
当我设置好值 那么我在A线程中的任意函数中 使用TlsGetVaule 就可以获取到这个值
但是在其他线程中则获取不到A线程TLS数据
TlsGetVaule 函数只有一个参数 就是TLS的索引

MultiThread玩具自动退出许可区和线程TLS

热门推荐

相关文章