TLS线程本地存储

记载TLS的相关知识点

前言

我们知道在一个进程中,所有线程是共享同一个地址空间的。所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线程对其进行了修改,也就会影响到其他所有的线程。不过我们可能并不希望这样,所以更多的推荐用基于堆栈的自动变量或函数参数来访问数据(也就是使用非static的、局部的对象),因为基于堆栈的变量总是和特定的线程相联系的。C 库的许多函数使用的 errno 就是一个例子。

不过如果某些时候,我们就是需要依赖全局变量或者静态变量,那有没有办法保证在多线程程序中能访问而不互相影响呢?答案是有的。操作系统帮我们提供了这个功能——TLS线程本地存储。TLS的作用是能将数据和执行的特定的线程联系起来。每一个线程都会有一个本地的副本,相当于每个线程都拥有了这个对象一样。

Linux中的线程本地存储

在Linux中,如果想要使用创建线程本地存储只需要使用关键字_thread


TLS线程本地存储
https://ysc2.github.io/ysc2.github.io/2024/01/03/TLS线程本地存储/
作者
Ysc
发布于
2024年1月3日
许可协议