您好我要通过c ++ boost库编写循环缓冲区。我提出了一些我无法理解的问题。
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
这是我第一次使用boost库,所以我真的不明白这两者有什么区别。请帮帮我
答案 0 :(得分:5)
没有区别 - lock
和guard
只是变量名称。
您声明了boost::lock_guard<boost::mutex>
类型的变量,并使用变量Mutex
初始化它们。第一个称为guard
,第二个称为lock
。
如果你把它们写在彼此旁边,那么你会看到的行为有一个区别:第一个应该最终得到互斥锁,如果它还没有被当前线程锁定,但是第二个会死锁,因为你无法锁定boost::mutex
两次。
答案 1 :(得分:5)
它们在概念上与:
相同int i(0);
int j(0);
这会将i
和j
声明为int
类型的变量,并使用0
初始化它们。
与此相同:
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
这会将guard
和lock
声明为boost::lock_guard<boost::mutex>
类型的变量,并使用Mutex
对其进行初始化。简单。
答案 2 :(得分:2)
没什么,你刚刚命名了第一个guard
,第二个lock
。
答案 3 :(得分:1)
这些只是两个具有相同类型的不同命名变量:boost :: lock_guard,它们都可以作为一个保护锁,在离开当前范围时会释放。