嗨,我要通过c ++ boost库编写循环缓冲区.我提出了一些我无法理解的问题.
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
Run Code Online (Sandbox Code Playgroud)
这是我第一次使用boost库,所以我真的不明白这两者有什么区别.请帮我
没有区别- lock而guard仅仅是变量的名称.
您正在声明类型boost::lock_guard<boost::mutex>的变量并使用变量初始化它们Mutex.第一个被调用guard,第二个被调用lock.
如果你把它们写在彼此旁边,那么你会看到的行为有一个区别:第一个应该最终得到互斥锁,如果它还没有被当前线程锁定,而第二个会死锁,因为你无法锁定boost::mutex两次.
它们在概念上与:
int i(0);
int j(0);
Run Code Online (Sandbox Code Playgroud)
这声明i并j作为类型的变量int,并用它们初始化它们0.
与此相同:
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
Run Code Online (Sandbox Code Playgroud)
这声明guard并lock作为类型的变量boost::lock_guard<boost::mutex>,并用它们初始化它们Mutex.简单.