訊號量集
當利用訊號量機制解決了單個資源的互斥訪問後,我們討論如何控制同時需要多個資源的互斥訪問。訊號量集是指同時需要多個資源時的訊號量操作。
(1)and型訊號量集
and型訊號量集是指同時需要多個資源且每種占用乙個資源時的訊號量操作。當一段處理**需要同時獲取兩個或多個臨界資源時,就可能出現由於各程序分別獲得部分臨界資源並等待其餘的臨界資源的局面。各程序都會「各不相讓」,從而出現死鎖。解決這個問題的乙個基本思路是:在乙個原語中申請整段**需要的多個臨界資源,要麼全部分配給它,要麼乙個都不分配給它。這就是and型訊號量集的基本思想。我們稱and型訊號量集p原語為swait(simultaneous wait),v原語為ssignal(simultaneous signal)。在swait時,各個訊號量的次序並不重要,雖然會影響程序歸人哪個阻塞佇列,但是因為是對資源全部分配或不分配,所以總有程序獲得全部資源並在推進之後釋放資源,因此不會死鎖。
下面是swait和ssignal的偽**。
swait(s1, s2, …, sn) //p原語;
else }
}(2)一般「訊號量集」
一般「訊號量集」是指同時需要多種資源、每種占用的數目不同、且可分配的資源還存在乙個臨界值時的訊號量處理。由於—次需要n個某類臨界資源,因此如果通過n次wait操作申請這n個臨界資源,操作效率很低,並可能出現死鎖。—般訊號量集的基本思路就是在and型訊號量集的基礎上進行擴充,在一次原語操作中完成所有的資源申請。程序對訊號量si的測試值為ti(表示訊號量的判斷條件,要求si>ti即當資源數量低於ti時,便不予分配),占用值為di(表示資源的申請量,即si=si—di)。對應的p、v原語格式為:
swait(s1, t1, d1; ...; sn, tn, dn);
ssignal(s1, d1; ...; sn, dn);
一般「訊號量集」可以用於各種情況的資源分配和釋放。下面是幾種特殊的情況:
1)swait(s,d,d)表示每次申請d個資源,當資源數量少於d個時,便不予分配。
2)swait(s,1,1)表示互斥訊號量。
3)swait(s,1,0)可作為乙個可控開關(當s≥1時,允許多個程序進入臨界區;當s=0時禁止任何程序進入臨界區)。
由於一般訊號量在使用時的靈活性,因此通常並不成對使用swait和ssignal。為了避免死鎖可一起申請所有需要的資源,但不一起釋放。
訊號量集(主要是AND訊號量)
訊號量集 當利用訊號量機制解決了單個資源的互斥訪問後,我們討論如何控制同時需要多個資源的互斥訪問。訊號量集是指同時需要多個資源時的訊號量操作。1 and型訊號量集 and型訊號量集是指同時需要多個資源且每種占用乙個資源時的訊號量操作。當一段處理 需要同時獲取兩個或多個臨界資源時,就可能出現由於各程序...
IPC之 訊號量集 多個訊號量
如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量 互斥鎖 來解決 柵欄模型 實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次 include include include include include include include include define ...
訊號量 二值訊號量
訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...