2013-08-20 130 views

回答

3

他们概念上等同于:

int i(0); 
int j(0); 

这声明ijint类型的变量,并与0它们初始化。

同样的,这样的:

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

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

3

有没有区别 - lockguard只是变量的名字。

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

如果你把它们都写在一起,那么你会看到的行为有一个区别:第一个应该最终得到互斥锁,如果它还没有被当前线程锁定,但第二个会陷入僵局,因为你不能锁定两次boost::mutex

1

没什么,您刚刚命名为第一个guard,第二个为lock

0

这些只是两个不同的具有相同类型的命名变量:boost :: lock_guard,它们都可以作为警戒锁,在离开当前作用域时释放。

相关问题