進(jìn)程同步
動(dòng)畫(huà)展示,臨界區(qū)的資源,在某個(gè)時(shí)刻,只能有一個(gè)進(jìn)程在使用。
臨界資源
一旦有對(duì)資源的共享,就必然涉及競(jìng)爭(zhēng)限制。
臨界資源用來(lái)表示一種,公共資源或者說(shuō)是共享數(shù)據(jù),可以被多個(gè)線程使用。
但是每一次,只能有一個(gè)線程使用它。一旦臨界資源被占用,其他線程,要想使用這個(gè)資源,就必須等待。
進(jìn)程同步的主要任務(wù)是,對(duì)多個(gè)相關(guān)進(jìn)程,在執(zhí)行次序上進(jìn)行協(xié)調(diào),以使并發(fā)執(zhí)行的諸進(jìn)程之間,能有效地共享資源和相互合作,從而使程序的執(zhí)行,具有可再現(xiàn)性。
臨界區(qū)
有了臨界資源的概念,就很容易理解臨界區(qū)的概念。在程序中,所有的操作,都是通過(guò)代碼執(zhí)行的,訪問(wèn)臨界資源的那段代碼就是臨界區(qū)
處理競(jìng)爭(zhēng)或者合作依賴導(dǎo)致的制約
空閑讓進(jìn):對(duì)于臨界資源,如果空閑沒(méi)有被使用,誰(shuí)來(lái)了之后都可以使用
忙則等待:如果臨界資源正在被使用,那么其他后來(lái)者就需要進(jìn)行等待。
有限等待:要求訪問(wèn)臨界資源的進(jìn)程,應(yīng)保證有限時(shí)間內(nèi),能進(jìn)入自己的臨界區(qū),自己不能傻傻的等
讓權(quán)等待:如果無(wú)法進(jìn)入自己的臨界區(qū)時(shí),應(yīng)立即釋放處理機(jī),而不能占著CPU死等,你死等就算了,別人卻也不能用了。
鎖
鎖就是對(duì)資源施加控制,鎖指的是一種控制權(quán)。
當(dāng)進(jìn)入臨界區(qū)時(shí),我們稱之為獲得鎖,獲得鎖之后就可以訪問(wèn)臨界資源。
其他線程想要進(jìn)入臨界區(qū),也需要先獲得鎖。
當(dāng)前線程結(jié)束后,將會(huì)釋放鎖,別的線程就可以獲取這個(gè)資源的鎖。
死鎖
鎖表示一種控制權(quán),對(duì)臨界資源的訪問(wèn)權(quán)限。
下面動(dòng)畫(huà)展示,兩個(gè)小人,都要使用資源1和資源2,才能達(dá)到對(duì)面。左邊小人戰(zhàn)友資源1,右邊小人占有資源2。他們占有當(dāng)前資源,再去獲取對(duì)方的資源時(shí),就會(huì)產(chǎn)生死鎖的情況。
如果臨界資源不止一個(gè),就可能出現(xiàn):需要先后訪問(wèn)兩種臨界資源A和B,thread1獲得了A線程的鎖之后,等待獲得B的鎖,但是thread2獲得了資源B的鎖,在等待A資源的鎖,這就出現(xiàn)了互相等待的情況。
解決方案
AND型信號(hào)量機(jī)制就是用于解決這種多共享資源下的同步問(wèn)題的。
將進(jìn)程在整個(gè)運(yùn)行過(guò)程中,需要的所有資源,一次性全部地分配給進(jìn)程,待進(jìn)程使用完后再一起釋放。
只要尚有一個(gè)資源未能分配給進(jìn)程,其它所有可能為之分配的資源,也不分配給它。
也就是對(duì),若干個(gè)臨界資源的分配,采取原子操作方式:要么把它所請(qǐng)求的資源全部分配到進(jìn)程,要么一個(gè)也不分配。
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6545瀏覽量
122743 -
線程
+關(guān)注
關(guān)注
0文章
501瀏覽量
19580 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
197瀏覽量
13928
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論