無代碼開發(fā)平臺(國內(nèi)無代碼開發(fā)平臺推薦)">國內(nèi)無代碼開發(fā)平臺(國內(nèi)無代碼開發(fā)平臺推薦)
809
2025-04-01
本文來源自boost官網(wǎng)
https://www.boost.org/doc/libs/1_75_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.sharable_upgradable_mutexes.upgradable_whats_a_mutex
可升級鎖和可共享鎖比普通的線程鎖提供了更多的功能。一般編程的時候我們可以區(qū)分是自己的代碼是要讀數(shù)據(jù)還是寫數(shù)據(jù)。如果只有部分線程需要寫數(shù)據(jù),那普通互斥鎖可能會降低代碼并行的效率。假如兩個線程只需要讀數(shù)據(jù),那么這兩個線程也沒有辦法并行運(yùn)行。然而實(shí)際上,他倆并不會相互影響。
如果我們提供一種方式,允許并行讀,禁止并行寫,那么就可以解決這個問題。下面介紹幾種線程鎖
獨(dú)占鎖:與普通互斥鎖類似,如果一個線程獲取了獨(dú)占鎖,其他的線程均不能獲取任何鎖(包括獨(dú)占鎖或者其他鎖), 如果任何其他線程擁有除獨(dú)占鎖以外的其他鎖,試圖獲取獨(dú)占鎖的線程將被阻塞。需要寫數(shù)據(jù)的線程應(yīng)該獲取獨(dú)占鎖。
共享鎖:如果一個線程獲取了共享鎖,其他的線程則不能再獲取獨(dú)占鎖。如果有線程獲取了獨(dú)占鎖,那么其他想獲取共享鎖的線程將被阻塞。只需要讀數(shù)據(jù)的線程應(yīng)該獲取這種鎖。
可升級鎖:如果一個線程獲取了可升級鎖,其他線程可以獲取共享鎖。如果一個線程獲取了獨(dú)占鎖,或者是可升級鎖,另一個想要獲取可升級鎖的線程將被阻塞。當(dāng)一個線程獲取了可升級鎖,那么當(dāng)其他線程想要獲取一個與之有關(guān)的共享鎖的時候,它會被確保升級為獨(dú)占鎖。這種特性適用于那種讀操作占比高,但是還是會夾雜一些寫操作的線程。當(dāng)一個線程獲取了可升級鎖,其他線程可以獲取共享鎖。如果此線程在讀取數(shù)據(jù)之后,又需要修改,當(dāng)所有共享鎖都被釋放之后。這個可升級鎖會原子性的升級為一個獨(dú)占鎖。之后這個線程可以修改數(shù)據(jù),并且能保證在修改的時候沒有其他線程修改過此數(shù)據(jù)。只有一個線程可以獲取可升級鎖
任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。