C#/ Java锁的c ++模拟(对象)

时间:2014-01-08 17:23:10

标签: c++ multithreading thread-safety

在C#/ Java中,我可以轻松地使任何线程不安全的代码成为线程安全的。我只是介绍特殊的“lockObj”并使用它:

    private object lockObj = new object();

    void ThreadSafeMethod()
    {
        lock (lockObj)
        {
            // work with thread-unsafe code
        }
    }

(有些人只使用lock (this),但这是not recomended

什么是最简单,最快的C ++等价物?我可以使用C ++ 11。

3 个答案:

答案 0 :(得分:3)

如果您可以使用C ++ 11,请使用std :: mutex(如果您不能使用C ++ 11,请使用boost :: mutex)

private:
    std::mutex m;

    void ThreadSafeMethod()
    {
        std::lock_guard<std::mutex> lock(m);
        // work with thread-unsafe code
    }

答案 1 :(得分:0)

Mutex可能是最接近的本机C ++等价物。对于包含外部库的最接近的等价物,您需要一个监视器。

但是,std::lock可能是最直线(提供的代码示例使用std::mutex)。

答案 2 :(得分:0)

如果你有一个C ++编译器或你的操作系统提供的标准原语,你可以使用std::lock,例如:Windows上的WaitForSingleObject或Unix / Linux上的pthread_mutex_lock。