【发布时间】:2013-08-20 12:46:03
【问题描述】:
您好,我准备通过 c++ boost 库编写一个循环缓冲区。我想出了一些我无法理解的问题。
boost::lock_guard<boost::mutex> guard( Mutex );
boost::lock_guard<boost::mutex> lock( Mutex );
这是我第一次使用 boost 库,所以我不太明白这两者之间有什么区别。请帮帮我
【问题讨论】:
您好,我准备通过 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,它们都作为保护锁工作,当离开当前作用域时将被释放。
【讨论】: