【发布时间】:2014-01-09 09:05:03
【问题描述】:
我读过 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 没有提供两种策略的比较/对比,也没有就在特定情况下何时使用哪种策略提出建议。
为问题添加上下文:我正在评估第 3 方库。该库使用全局变量,not 是否使用锁定,我想在多线程程序中使用它。该程序使用线程来最小化网络延迟。
有没有一个不折不扣的赢家?或者是否有不同的场景需要使用其中一种?
【问题讨论】:
-
一般情况下最好都不使用。你为什么要使用它?
-
谢谢大卫。它是一个基于网络的多线程程序,可帮助在面对延迟时保持吞吐量。我想尝试使用第 3 方库进行解析,但该库使用静态全局变量进行状态。
-
嗯,乱七八糟。我可以看到你来自哪里。理想世界有参数传递的信息。也许考虑一个对线程更友好的库?
标签: c++ c pthreads thread-local-storage thread-specific-storage