c - 适本地存储线程特定变量

标签 c multithreading pthreads hashtable binary-search

我正在重组现有的应用程序代码。这种重组的要求之一是我需要存储一个线程特定变量,该变量会经常被读取和写入引用。我将有大约 50 个这样的线程。线程特定变量基本上是指向结构的指针。 在这里,我无法决定我应该如何存储这个变量。我是否应该将其设置为可由 pthread_getspecific/pthread_setspecific 访问的线程特定键?但是我遇到了一些帖子,这些帖子说对这些的调用非常慢。然后另一种方法可能是拥有一个全局结构,该结构将所有这些线程特定指针存储在排序数组(以使用二进制搜索)或键值形式的元素哈希表中。键主要是常量 (thread_id),值可以经常更改。同样,这里最好的方法是什么? 我知道最快访问所需值的方法是实际将此指针传递给每个函数并继续传播它。但这将需要大量我想避免的代码重写。 预先感谢您的回复。

最佳答案

如果您使用的是 gcc 工具链(还有一些其他编译器),您还有第三种选择。使用 __thread存储类说明符。这是非常有效的。它的工作原理是将线程本地存储项隔离到单独的 VM 页面中,这些页面在调度线程时进行切换。这样每个线程都能够指向它自己的变量副本。成本只是每个线程调度的一个操作,没有其他方法的每个键查找成本。

关于c - 适本地存储线程特定变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828732/

相关文章:

c - 对标两个函数

java - Java中如何同步Thread.sleep和Thread.interrupt?

php - php内部的信号

c++ - 从多个线程更新最大值

C pthread 加入一个结束的线程

c - 旧 gcc 编译器的 __sync_val_compare_and_swap 函数的替代方案

c - qsort在c中动态创建数组

c - 尝试访问二进制文件时出现段错误

用c程序将xml文件转换为wbxml

c++ - 是否可以在进程中的所有线程上设置 pthread_sigmask?