Linux的TLS(Thread Local Storage)实现由内核和用户两部分模块配合完成的。 内核对TLS需要做的事情是能够让用户态程序(通常是 nptl——一个pthread的实现)在某个时刻能够设置线程唯一的基址值到内核的线程信息结构内。系统调用set_thread_area(x86)和prctl(X86_64)用来完成这个任务。在x86家族中,这些系统调用能够设置fs(x86_64)或者gs(x86)段选择器对应的全局段描述符(gdt)的基址信息。这样线程想访问那些线程唯一的数据的时候,只需要访问fs或者gs段的内容即可,如fs:[0]。这样的好处是使得访问线程本地的数据时候,没有额外的系统调用的消耗,和访问其他用户态数据一样简单。关于段选择器,段描述器,可以参考Intel Software Developers' Manual。
Linux & Windows TLS实现
最新推荐文章于 2024-12-02 09:45:47 发布