如何使第三方库线程安全与Boost线程一起使用?

1 c++ multithreading boost mutex

我正在使用第三方C++库(OpenFst),它不是特别设计为线程安全的.但它确实有一些未使用的Mutex类.

现在我想调用该库中的一些函数并在Boost线程中运行它们.我怎样才能做到这一点?我只需要编写额外的Mutex类吗?

特别是,我的一些线程将使用该库中的一些数据结构,直到发现另一个线程已生成这些结构的更新副本.我是线程的新手,并不知道从哪里开始......

bdo*_*lan 5

最安全的方法是确保一次只有一个线程调用第三方库 - 也就是说,每次调用库时都要使用互斥锁.然而,使多个线程可以同时使用库将会非常复杂,并且需要很好地理解线程安全设计以及库本身的设计.

如果您对库进行审核并发现它根本没有全局状态(即,操纵一个FST永远不会永远与另一个FST操作相同的数据进行交互),那么在数据库上采用互斥量可能是安全的.个人FST.如果有一些方法根本不修改FST结构,那么在多个线程中运行它们是安全的,前提是没有相同FST的编写器.但是,这需要仔细审核OpenFST代码.我建议在这里与原来的OpenFST开发人员合作; 他们应该能够帮助指出潜在的陷阱和线程问题.