是否有更简单的实例化静态库的方法?

Jak*_*der 5 c c++

我有这个静态的C库,我需要运行多线程(线程必须彼此没有互动,我只需要他们多在得到的东西做得更快同一时间).我还将c库包装到c ++ cli库中,然后由c#main应用程序使用.

由于静态库对通过它运行的多个线程没有很好的响应(这是我无法控制的,我没有其依赖的源),我已经多次复制(略有变化)整个事物并在c ++ cli库(及其副本)和c#应用程序之间放置另一个包装器,该应用程序模拟副本最多8个对象实例.它有效,但对库的功能进行任何更改都相当粗糙和繁琐.

有没有人知道一种更简单的方法来达到同样的效果?最好的猜测我有一些静态内存是在同一个库中工作的多个线程之间发生冲突的地方,有没有办法强制所有静态变量都是特定于线程的?(没有能力添加declspec线程给他们).

dor*_*ron 0

问题似乎是该库不可重入。如果您有权访问库源代码,那么最好的选择是搜索所有全局变量并使它们成为线程本地变量。这可以thread_local在 C++11 上使用关键字来完成,或者__thread如果使用 gcc/g++ 编译则使用关键字来完成。

这确保了每个线程上使用每个全局变量的不同副本。