【发布时间】:2013-01-09 16:06:52
【问题描述】:
在我的 c++ 程序中,我使用了一个非线程安全的专有库 (.dll)。 :-(
在这个库中有一个特定的科学计算。
有没有办法安全地启动这个库的多个计算与线程并行? (1个进程,多线程)
我的程序“就像”一个“for”循环,每次计算我的非线程安全库时都会调用它
【问题讨论】:
-
是的:自己同步所有内容。
-
当今的大多数库都是线程安全的,因为您可以同时运行多个实例。例如:STL 的大多数实现。看看这个关于它的讨论sgi.com/tech/stl/thread_safety.html。但是,不看实际代码很难知道。
-
通过设计避免死锁。
-
@scanpat:“自己同步所有内容”意味着有一个很大的旧互斥锁,您在使用该库时持有该互斥锁。当您要求“与线程并行计算该库的多个计算”时,这可能不是您真正想要的。任何时候只有一个线程会持有互斥锁,因此它并不是真正并行使用库。如果“库本身”是线程安全的,但其中有单独的类/结构是不安全的,那么您可以同步这些结构。但我假设“库不是线程安全的”是指它具有不安全的全局状态。
-
同步将保证正确执行,但不会带来 OP 希望看到的任何并行性。
标签: c++ parallel-processing thread-safety