我正在研究一个库的多线程实现。在这个库的一个模块中,有一些全局变量(在程序执行中经常使用)。为了使对这些变量的访问更加安全,我使用 Thread-local storage (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)
变量是造成如此糟糕表现的原因吗?