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中,他們的實現什有區別的,導致最後應用的行為也是有區別的。先看下面這...