2013-08-20 133 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,它們都可以作爲警戒鎖,在離開當前作用域時釋放。

相關問題