线程安全函数调用:std :: shared_ptr

时间:2016-08-18 12:57:22

标签: multithreading c++11 design-patterns mutex shared-ptr

我有一个应用程序,它对外部库进行了多次调用。其中一个调用不是线程安全的,所以如果我不以某种方式保护它,一切都会崩溃。

我尝试使用以下模式,即在mutex内包裹shared_ptr。请注意,可以在不同线程的应用程序中的许多不同位置实例化此类。

class MyClass 
{
public:
    MyClass(const std::shared_ptr<std::mutex>& mutex) :
        _mutex(mutex)
    {
    }

    MyClass(MyClass&& other) :
        _mutex(other._mutex)
    {
    }

    void run()
    {
        std::lock_guard<std::mutex> lock(*_mutex);

        ExtLib::runNonThreadSafeFunction();
    }
private:
    std::shared_ptr<std::mutex> _mutex;
};

使用这种方法有任何风险吗?我怀疑它会导致dead-locks,但我不确定。

如果这不是一个好方法,你会如何实现它?

注意:我也在考虑在static mutex内使用run-function,但我相信Visual Studio 2013不支持它:https://connect.microsoft.com/VisualStudio/feedback/details/808030/runtime-crash-with-static-std-mutex )。

0 个答案:

没有答案