我读过Kerrisk的The Linux Programming Interface: A Linux and UNIX System Programming Handbook,线程第31章。本章包括线程特定数据(第31.3.4节)和线程本地存储(第31.4节)。主题涵盖在第663-669页。线程特定数据与线程本地存储
线程特定数据(pthread_key_create
,pthread_setspecific
,pthread_getspecific
,和朋友)看起来更加强大,但似乎多了几分使用麻烦,并显示使用内存管理器更频繁。
线程本地存储(关于静态和全局声明的__thread
)看起来稍微不够强大,因为它只限于编译时间,但它似乎更易于使用,并且在运行时似乎不在内存管理器中。
我对运行时内存管理器可能是错误的,因为可能存在幕后代码,当它遇到__thread
变量时调用pthread_key_create
。
Kerrisk没有提供两种策略的比较/对比,并且他没有提出在特定情况下何时使用哪种策略的建议。
要添加上下文到问题:我正在评估第三方库。该库使用全局变量,而不是使用锁定,我想在一个多线程程序中使用它。该程序使用线程来最小化网络延迟。
有没有一个传手赢家?还是有不同的情况下使用其中一种?
通常最好不要使用。你为什么要使用它? –
谢谢大卫。它是一个基于网络的多线程程序,可帮助在面对延迟时保持吞吐量。我想尝试解析第三方库,但该库使用状态的静态全局变量。 – jww
嗯,凌乱。我可以看到你来自哪里。理想世界具有通过参数传递的信息。也许考虑一个更线程友好的库? –