【问题标题】:what is difference between lock() and guard() after lock_guardlock_guard 之后 lock() 和 guard() 有什么区别
【发布时间】:2013-08-20 12:46:03
【问题描述】:

您好,我准备通过 c++ boost 库编写一个循环缓冲区。我想出了一些我无法理解的问题。

boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );

这是我第一次使用 boost 库,所以我不太明白这两者之间有什么区别。请帮帮我

【问题讨论】:

    标签: c++ boost mutex


    【解决方案1】:

    它们在概念上与:

    int i(0);
    int j(0);
    

    这将ij 声明为int 类型的变量,并用0 初始化它们。

    与此相同:

    boost::lock_guard<boost::mutex> guard( Mutex );
    boost::lock_guard<boost::mutex> lock( Mutex );
    

    这将guardlock 声明为boost::lock_guard&lt;boost::mutex&gt; 类型的变量,并用Mutex 初始化它们。很简单。

    【讨论】:

      【解决方案2】:

      没有区别 - lockguard 只是变量名称。

      您正在声明boost::lock_guard&lt;boost::mutex&gt; 类型的变量并使用变量Mutex 对其进行初始化。第一个称为guard,第二个称为lock

      如果你把它们写成这样,那么你会看到一个不同的行为:第一个最终应该获得互斥锁,如果它还没有被当前线程锁定,但是第二个会死锁,因为你不能两次锁定boost::mutex

      【讨论】:

        【解决方案3】:

        没什么,你刚刚命名了第一个 guard 和第二个 lock

        【讨论】:

          【解决方案4】:

          这只是两个具有相同类型的不同命名变量:boost::lock_guard,它们都作为保护锁工作,当离开当前作用域时将被释放。

          【讨论】:

            猜你喜欢
            • 2014-05-18
            • 2018-10-07
            • 2016-10-07
            • 2017-12-07
            • 1970-01-01
            • 1970-01-01
            • 2016-08-16
            • 2021-10-21
            • 2021-05-12
            相关资源
            最近更新 更多