lock_guard之后lock()和guard()之间有什么区别

时间:2013-08-20 12:46:03

标签: c++ boost mutex

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

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

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

4 个答案:

答案 0 :(得分:5)

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

您声明了boost::lock_guard<boost::mutex>类型的变量,并使用变量Mutex初始化它们。第一个称为guard,第二个称为lock

如果你把它们写在彼此旁边,那么你会看到的行为有一个区别:第一个应该最终得到互斥锁,如果它还没有被当前线程锁定,但是第二个会死锁,因为你无法锁定boost::mutex两次。

答案 1 :(得分:5)

它们在概念上与:

相同
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<boost::mutex>类型的变量,并使用Mutex对其进行初始化。简单。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

这些只是两个具有相同类型的不同命名变量:boost :: lock_guard,它们都可以作为一个保护锁,在离开当前范围时会释放。