并行化具有大量全局变量的库

时间:2012-10-17 09:44:16

标签: c++ qt

我目前正在使用QT(4)来并行化由非程序员用C语言编写的非线程安全库,因此有很多全局变量。线程不需要交互或共享数据,它们每个只调用库的一堆方法,然后最后库提供一个进一步使用的输出。

问题是,线程之间默认共享全局变量,导致库在不同的地方崩溃。有两种方法可以解决这个问题:

重构整个库以不使用全局变量(ouch),或者找到一种方法使全局变量不共享,或者找到第三种神奇方式。

后者是QT或标准(C ++ 01)C ++的选项吗?

3 个答案:

答案 0 :(得分:2)

使用线程本地存储是一种使全局变量不共享的方法。从此开始,链接到不同实现的详细信息:

http://en.wikipedia.org/wiki/Thread-local_storage

答案 1 :(得分:1)

您不能“取消共享”全局变量。并行化(bar重构)唯一可用的选项是具有多个进程而不是多个线程。最好合并。

答案 2 :(得分:0)

创建一个负责同步对全局变量的访问的单例。全局变量成为新单例类的成员,可以通过与当前全局变量具有相同名称的方法进行访问,因此您无需在整个地方更改代码。