【发布时间】:2011-07-01 21:39:18
【问题描述】:
我正在研究一个库的多线程实现。在这个库的一个模块中,有一些全局变量(在程序执行中经常使用)。为了使对这些变量的访问更加安全,我使用线程本地存储 (TLS) 关键字 __declspec(thread) 声明它们。
这是对库外部函数的调用。此函数使用带有全局变量的模块:
for(i = 0; i<n_cores; i++)
hth[i] = (HANDLE)_beginthread((void(*)(void*))MT_Interface_DimenMultiCells,0,(void*)&inputSet[i]);
这样我猜库中使用的所有变量都会为每个线程复制。
当我在 x8 核处理器上运行程序时,完成操作所需的时间不会超过单进程实现所需时间的 1/3。
我知道不可能达到 1/8 的时间,但我认为至少 1/6 是可以达到的。
问题是:这些__declspec(thread) 变量是否是导致性能如此糟糕的原因?
【问题讨论】:
-
你还在 StackOverflow 上吗?如果是这样,也许您可以让我们知道您的结论是什么:您是否测量了使用和不使用线程局部变量的性能?是这样,有什么不同?还是有其他方法解决了这个问题?
标签: c multithreading performance declspec