0

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

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

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

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

4

3 回答 3

2

使用线程本地存储是一种使全局变量不共享的方法。起点,带有不同实现细节的链接:

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

于 2012-10-17T10:07:08.337 回答
1

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

于 2012-10-17T09:49:25.217 回答
0

创建一个负责同步访问全局变量的单例。全局变量成为新单例类的成员,并且可以通过与当前全局变量同名的方法访问,因此您无需到处更改代码。

于 2012-10-17T10:43:07.140 回答