Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我目前正在使用 QT (4) 来并行化由非程序员用 C 语言编写的非线程安全库,因此有很多全局变量。线程不需要交互或共享数据,它们每个都只是调用库的一堆方法,然后在最后库提供一个输出以供进一步使用。
但问题是,全局变量默认在线程之间共享,导致库在不同的地方崩溃。有两种方法可以解决此问题:
重构整个库以不使用全局变量(哎哟),或者找到一种方法使全局变量不共享,或者找到第三种神奇的方法。
后者是 QT 还是标准 (C++01) C++ 的选项?
使用线程本地存储是一种使全局变量不共享的方法。起点,带有不同实现细节的链接:
http://en.wikipedia.org/wiki/Thread-local_storage
您不能“取消共享”全局变量。并行化(条形重构)的唯一可用选项是拥有多个进程而不是多个线程。最好是汇集。
创建一个负责同步访问全局变量的单例。全局变量成为新单例类的成员,并且可以通过与当前全局变量同名的方法访问,因此您无需到处更改代码。