电竞比分网-中国电竞赛事及体育赛事平台

分享

互斥鎖(排它鎖、獨(dú)占鎖、寫鎖、X鎖)和共享鎖(讀鎖、S鎖) 自旋鎖 | 學(xué)步園

 liang1234_ 2019-01-23

共享鎖(S鎖):如果事務(wù)T對數(shù)據(jù)A加上共享鎖后,則其他事務(wù)只能對A再加共享鎖,不能加排他鎖,直到已釋放所有共享鎖。獲準(zhǔn)共享鎖的事務(wù)只能讀數(shù)據(jù),不能修改數(shù)據(jù)。
排他鎖(X鎖):如果事務(wù)T對數(shù)據(jù)A加上排他鎖后,則其他事務(wù)不能再對A加任任何類型的鎖,直到在事務(wù)的末尾將資源上的鎖釋放為止。獲準(zhǔn)排他鎖的事務(wù)既能讀數(shù)據(jù),又能修改數(shù)據(jù)。

linux 自旋鎖:

當(dāng)進(jìn)程進(jìn)入CPU運(yùn)行時,就會給它的代碼上鎖,以免別的CPU中的進(jìn)程修改里面的代碼(不排除CPU給別的CPU上鎖這樣的情況,以后會討論到。)。所謂子旋鎖就是這樣的一把鎖:進(jìn)程A進(jìn)入CPU,鎖上門運(yùn)行,進(jìn)程B來到CPU前,發(fā)現(xiàn)門被鎖上了,于是等待進(jìn)程A出來交出開鎖鑰匙。

正如每次我們談到“鎖”這個概念時,總會談到“死鎖”——是的,我們用鎖,就必須防止死鎖,死鎖是這樣產(chǎn)生的:進(jìn)程A進(jìn)入CPU運(yùn)行,上鎖,進(jìn)程B 來到CPU門前等待進(jìn)程A出來,可是糟糕的情況出現(xiàn)了:進(jìn)程A要想出來就必須獲取進(jìn)程B的幫助,于是進(jìn)程A開始等待進(jìn)程B的幫助,可是進(jìn)程B卻又一直等待進(jìn)程A出來!這樣的等待無法終止,最終成為死鎖。

再比如,進(jìn)程A要鎖上甲代碼段,然后想再去鎖乙代碼段,進(jìn)程B要鎖上乙代碼段,然后想再去鎖甲代碼段。第一步大家都沒問題,可是兩個進(jìn)程都要進(jìn)行下一步時,發(fā)現(xiàn)無法完成任務(wù)了:進(jìn)程A已經(jīng)鎖上甲代碼段,進(jìn)程B沒法再去操作它,同理進(jìn)程B已經(jīng)鎖上乙代碼段,進(jìn)程A也沒辦法操作它,于是兩個進(jìn)程等待對方釋放鎖,當(dāng)然,這樣的等待也是無止無休的。這就好象兩輛汽車在一座很榨的橋上相向行駛,兩車碰頭誰也不讓誰,都在等待對方讓路。

避免死鎖,必須使每次上鎖操作都是有順序的、原子的操作。有順序的,也就是說每次都按照可執(zhí)行隊(duì)列地址從低向高的順序上鎖——我們以后會很好的討論這個。

原子的,就是說每次上鎖必須執(zhí)行到底,否則不予執(zhí)行

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多