线程本地存储是否在线程本地和全局变量之外的任何地方使用?在我们编写的任何新代码中它是否有用?
答案 0 :(得分:4)
TLS在新代码中肯定有用。如果您想要一个需要特定于每个线程的全局变量(如C / C ++中的errno
),那么线程本地存储就是您的选择。
答案 1 :(得分:1)
线程特定的单例对象?一个多线程Web服务器,每个线程处理一个请求,一些TLS数据的可能性非常大(如请求URL或一些数据库连接,基本上一些资源打算在请求处理期间的任何时候使用,如果需要的话)以便在需要时可以在代码中的任何位置轻松访问它们。
答案 2 :(得分:0)
这些天errno
通常放在线程本地存储中。
在某些情况下(例如:需要启动代码的DLL这样的共享库)使用线程本地存储可能会出现问题。
答案 3 :(得分:0)
我只需要它来进行特定于线程的错误处理和优化(在C中):
__thread int cpfs_errno;
static __thread struct Cpfs *g_cpfs;
在这个例子中,这节省了我将struct Cpfs *
的上下文指针传递给它永远不会改变的几十个函数。