獨佔資源 mutex和lock gurad

2021-10-20 05:55:36 字數 1181 閱讀 1850

mutex互斥量用來以獨佔方式訪問資源。

操作作用

mutex m

預設建構函式,構建乙個未鎖定的mutex物件

~mutex()

析構函式

m.lock()

嘗試鎖住mutex。如果mutex已是鎖定狀態,會造成阻塞

m.try_lock()

嘗試鎖住mutex,成功則返回true

m.try_lock_for(dur)

嘗試在時間段dur內鎖住mutex,成功則返回true

m.try_lock_until(tp)

嘗試在時間點tp之前鎖住mutex,成功則返回true

m.unlock()

解鎖mutex

m.native_handle()

mutex可以單獨使用,但更好的是搭配lock_guard使用。

lock_guard可以確保乙個locked mutex在離開lock_guard作用域時總會被解鎖。

操作作用

lock_guard lg(m)

為mutex物件構建乙個lock_guard,並鎖定mutex物件

lock_guard(m, adopt_lock)

為已經鎖定的mutex物件構建乙個lock_guard

~lock_guard()

析構函式,解鎖mutex物件

迴圈互斥量recursive_mutex允許在同乙個執行緒內多次呼叫lock()而不會引起阻塞,在呼叫一次unlock()後解鎖mutex。

有時候乙個執行緒需要同時鎖定多個mutex,如果對多個mutex進行逐一鎖定可能會引起問題:鎖住了m1但在m2阻塞了;如果以不同的次序鎖住相同的mute還可能引起死鎖。

mutex m1;

mutex m2;

lock_guard

lg1(m1)

;lock_guard

lg2(m2)

;

lock()處理多個mutex時,只有當所有mutex物件都是釋放狀態,才會把所有mutex鎖住,否則會阻塞直到所有mutex變成釋放狀態。

mutex m1;

mutex m2;

try_lock()不會引起阻塞,當所有mutex物件都被成功鎖定後返回-1,否則返回第乙個鎖住失敗的mutex物件下標。

mysql 獨佔鎖 mysql的獨佔鎖和共享鎖

當有多個事務同時更新一條sql時,mysql是如何處理的呢?很顯然,使用加鎖的方式,乙個事務獲得了鎖,進行操作,其他事務排隊乙個個等著,等當前這個事務執行完釋放鎖,其他事務獲取鎖取到鎖的進行操作。這裡的鎖就是獨佔鎖,也就是x鎖。那麼如果有查詢這一行資料時,是要加鎖嗎?不是的,mysql為了提高效能,...

Mutex 和 monitor的區別

monitor和lock多用於鎖定被呼叫端,而mutex則多用鎖定呼叫端。lock this 或者是用monitor也是一樣的,如下 monitor.enter this do something monitor.exit this monitor的好處是可以用tryenter this,timeo...

linux中mutex和semaphore的區別

很多程式設計的書裡在介紹mutex和semaphore的時候都會說,mutex是一種特殊的semaphore.當semaphore的n 1時,就變成了binary semaphore,也就等同與mutex了。但是實際上,在linux中,他們的實現什有區別的,導致最後應用的行為也是有區別的。先看下面這...