【问题标题】:How can I make a third-party library thread-safe for use with Boost threads?如何使第三方库线程安全以与 Boost 线程一起使用?
【发布时间】:2011-03-08 16:40:08
【问题描述】:

我正在使用第三方 C++ 库 (OpenFst),它并不是专门为线程安全而设计的。不过,它确实有一些未使用的 Mutex 类。

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

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

【问题讨论】:

    标签: c++ multithreading boost mutex


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您不想阻止对整个库的访问。

      相反,只需动动脑筋 - 如果您有一个可以在任何线程的生命周期内更新的数据结构,则同步对该数据结构的访问。

      如果它是在任何线程开始执行之前创建的并且是只读的,则不需要进行同步。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2011-12-13
        相关资源
        最近更新 更多