嗨,我准备通过 c++ boost 库编写一个循环缓冲区。我提出了一些我无法理解的问题。
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
这是我第一次使用 boost 库,所以我真的不明白这两者之间有什么区别。请帮我
它们在概念上与以下内容相同:
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
。简单的。
没有区别 - lock
只是guard
变量名称。
您正在声明类型变量boost::lock_guard<boost::mutex>
并使用变量对其进行初始化Mutex
。第一个被称为guard
,第二个被称为lock
。
如果你把它们写成这样,那么你会看到一个不同的行为:第一个最终应该获得互斥锁,如果它还没有被当前线程锁定,但是第二个会死锁,因为你不能锁boost::mutex
两次。
没什么,你刚刚命名了第一个guard
和第二个lock
。
这些只是两个具有相同类型的不同命名变量:boost::lock_guard,它们都作为保护锁工作,当离开当前范围时将被释放。