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