3

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

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

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

4

4 回答 4

7

它们在概念上与以下内容相同:

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。简单的。

于 2013-08-20T12:53:31.940 回答
6

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

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

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

于 2013-08-20T12:49:19.637 回答
2

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

于 2013-08-20T12:50:06.843 回答
1

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

于 2013-08-20T13:16:50.520 回答