摘要: 本文为线程本地存储TLS系列之实现探究。
我们在上一篇线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理中曾经说过TLS可以分为两类:静态TLS和动态TLS。然后又分别说明了两者在程序实现时的用法,并且还说明了windows对这两类TLS的实现原理,我们本文的目的是从底层实现的角度深入探究,深刻理解原理。
阅读全文
摘要: 我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据,因为基于堆栈的变量总是和特定的线程相联系的。
不过如果某些时候(比如可能是特定设计的dll),我们就是需要依赖全局变量或者静态变量,那有没有办法保证在多线程程序中能访问而不互相影响呢?答案是有的。操作系统帮我们提供了这个功能——TLS线程本地存储。TLS的作用是能将数据和执行的特定的线程联系起来。
实现TLS有两种方法:静态TLS和动态TLS。以下我们将分别说明这两类TLS。
阅读全文