嗨,我准备通过 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,它们都作为保护锁工作,当离开当前范围时将被释放。