嗨我要通过C++ boost库编码循环缓冲区。我想出了一些我无法理解的问题。lock_guard之后lock()和guard()之间的区别是什么
boost::lock_guard<boost::mutex> guard(Mutex);
boost::lock_guard<boost::mutex> lock(Mutex);
这是我第一次使用boost库,所以我真的不明白这两者之间有什么区别。请帮我
嗨我要通过C++ boost库编码循环缓冲区。我想出了一些我无法理解的问题。lock_guard之后lock()和guard()之间的区别是什么
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,它们都可以作为警戒锁,在离开当前作用域时释放。