首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程特定数据与线程本地存储

线程特定数据与线程本地存储
EN

Stack Overflow用户
提问于 2014-01-09 09:05:03
回答 2查看 10.1K关注 0票数 15

我读过Kerrisk的Linux编程接口: Linux和UNIX系统编程手册,关于线程的第31章。本章包括线程特定数据(31.3.4节)和线程本地存储(31.4节)。这些主题载于第663-669页。

线程特定的数据(pthread_key_createpthread_setspecificpthread_getspecific和朋友)看起来更强大,但使用起来似乎有点麻烦,而且似乎更频繁地使用内存管理器。

线程本地存储(静态和全局声明的__thread)看起来功能稍弱一些,因为它的编译时间有限,但它似乎更容易使用,并且在运行时似乎不受内存管理器的影响。

关于运行时内存管理器,我可能弄错了,因为在后台可能有代码在遇到pthread_key_create变量时调用__thread

Kerrisk没有提供这两种策略的比较/对比,他也没有就在给定的情况下使用哪种策略提出建议。

为问题添加上下文:我正在评估一个第三方库。库使用全局,不使用锁定,我想在多线程程序中使用它。该程序使用线程来最小化网络延迟。

有胜利者吗?或者,是否有不同的场景需要使用其中一种?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-12 17:54:06

pthread_key_create和朋友更老了,因此在更多的系统上得到了支持。

__thread相对较新,通常使用起来更加方便,并且(根据维基百科)在大多数仍然重要的POSIX系统上得到了支持: Solaris Studio C/ C ++、IBM / C++、GNU、Clang和Intel C++编译器(Linux ))。

__thread还有一个显著的优点,它可以从信号处理程序中使用(除了使用来自dlopened共享库的__thread (请参阅此错误) ),因为它的使用不涉及malloc (除了相同的例外)。

票数 13
EN

Stack Overflow用户

发布于 2014-01-09 14:10:53

线程接口是POSIX标准,因此它们更易于移植。如果您打算在linux系统之外的东西上使用代码,请使用它们。另一方面,如果您严格使用gcc/linux,那么__thread机制肯定更容易使用。请注意,这是gcc特有的扩展,不是所有平台都支持的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21015738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档