lock_guard之后lock()和guard()之间有什么区别

use*_*589 1 c++ boost mutex

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

boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ely 5

没有区别- lockguard仅仅是变量的名称.

您正在声明类型boost::lock_guard<boost::mutex>的变量并使用变量初始化它们Mutex.第一个被调用guard,第二个被调用lock.

如果你把它们写在彼此旁边,那么你会看到的行为有一个区别:第一个应该最终得到互斥锁,如果它还没有被当前线程锁定,而第二个会死锁,因为你无法锁定boost::mutex两次.


Naw*_*waz 5

它们在概念上与:

int i(0);
int j(0);
Run Code Online (Sandbox Code Playgroud)

这声明ij作为类型的变量int,并用它们初始化它们0.

与此相同:

boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
Run Code Online (Sandbox Code Playgroud)

这声明guardlock作为类型的变量boost::lock_guard<boost::mutex>,并用它们初始化它们Mutex.简单.