系统为进行中的每个线程维护了一个数组还是为进程????
//但同一进程中的所有线程又只能使用同一个索引是什么意思??????
在这里有一个线程局部存储器(Tls),我们大概了解一下,系统为进行中的每个线程维护了一个数组,但同一进程中的所有线程又只能使用同一个索引(就是我们在图中看到的__tlsindex),可以通过TlsSetValue向其中存放一个指针,通过TlsGetValue获取该存放的指针。
[解决办法]
个人分析 不一定准确
看代码很明显是对线程这一套进行封装的代码 这是库的实现 并未太多涉及到windows真正的实现 所以说 不能说系统如何如何 因为这只是这个库在如何如何封装创建线程这一套
看代码 应该是库封装了CreateThread的代码 比如封装成了beginthread beginthread里面把用户实现的线程函数以及要传的参数等一些信息 封装成了一个结构体 然后传给了一个函数类型同线程函数相同的一个跳转函数 实际上传给CreateThread的线程函数地址 正是这个threadstartex 这样实际上线程创建完了以后 限制性threadstartex 而且这时候线程局部存储已经准备好 设置、取出真正的用户线程函数代码、参数 创建一个异常处理结构执行用户线程函数代码
因此__tlsindex只是这个库申请的一个线程局部存储
总之这只是库的实现 并不是操作系统的实现