我已经阅读了 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
在静态和全局声明上)看起来不太强大,因为它受限于编译时间,但它似乎更易于使用,并且在运行时似乎远离内存管理器。
pthread_key_create
我对运行时内存管理器的看法可能是错误的,因为当它遇到__thread
变量时可能会有在后台调用的代码。
Kerrisk 没有提供两种策略的比较/对比,他也没有就在特定情况下何时使用哪种策略提出建议。
为问题添加上下文:我正在评估第 3 方库。该库使用全局变量,不使用锁定,我想在多线程程序中使用它。该程序使用线程来最小化网络延迟。
有没有一个不折不扣的赢家?或者是否有不同的场景需要使用其中一种?