嗨我要通過C++ boost庫編碼循環緩衝區。我想出了一些我無法理解的問題。lock_guard之後lock()和guard()之間的區別是什麼
boost::lock_guard<boost::mutex> guard(Mutex);
boost::lock_guard<boost::mutex> lock(Mutex);
這是我第一次使用boost庫,所以我真的不明白這兩者之間有什麼區別。請幫我
嗨我要通過C++ boost庫編碼循環緩衝區。我想出了一些我無法理解的問題。lock_guard之後lock()和guard()之間的區別是什麼
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,它們都可以作爲警戒鎖,在離開當前作用域時釋放。