編程游戲 當(dāng)有n個(gè)并發(fā)進(jìn)程共享某個(gè)臨界資源時(shí),求互斥信號(hào)量的取值范圍?
當(dāng)有n個(gè)并發(fā)進(jìn)程共享某個(gè)臨界資源時(shí),求互斥信號(hào)量的取值范圍?信號(hào)量信號(hào)量用于:控制對(duì)共享資源的訪問(互斥);指示事件的發(fā)生;同步兩個(gè)任務(wù)。以下代碼中的信號(hào)量:shareduresourceusem用于
當(dāng)有n個(gè)并發(fā)進(jìn)程共享某個(gè)臨界資源時(shí),求互斥信號(hào)量的取值范圍?
信號(hào)量信號(hào)量用于:
控制對(duì)共享資源的訪問(互斥);指示事件的發(fā)生;同步兩個(gè)任務(wù)。
以下代碼中的信號(hào)量:shareduresourceusem用于控制對(duì)共享資源的訪問(互斥);信號(hào)量keyudownusem指示事件的發(fā)生。如果信號(hào)量的值大于0,則可以使用它。如果該信號(hào)量的值為0,則該信號(hào)量上的pend操作被放置在等待列表中。
初始化信號(hào)量時(shí),必須提供信號(hào)量的初始值。有三種初始值:
0:當(dāng)信號(hào)量用于指示事件時(shí),例如:
key_uu2;down_2;SEM=ossemcreate(0)1:當(dāng)信號(hào)量用于控制對(duì)共享資源的訪問時(shí),例如:
shared_2;resource_2;SEM=ossemcreate(1)
n:當(dāng)信號(hào)量用于表示任務(wù)的n個(gè)相同資源時(shí)。在RTOS啟動(dòng)之前,我們還應(yīng)該注意信號(hào)量的初始化?答:在每個(gè)進(jìn)程中訪問關(guān)鍵資源的程序稱為關(guān)鍵區(qū)域(關(guān)鍵資源是一次只允許一個(gè)進(jìn)程使用的共享資源)。一次只允許一個(gè)工序進(jìn)入關(guān)鍵區(qū)域,其他工序進(jìn)入后不允許進(jìn)入。2進(jìn)入關(guān)鍵區(qū)域的過(guò)程的調(diào)度原則如下:1。如果多個(gè)進(jìn)程需要進(jìn)入空閑的關(guān)鍵區(qū)域,則一次只允許一個(gè)進(jìn)程進(jìn)入。② 在任何時(shí)候,關(guān)鍵區(qū)域中只能有一個(gè)進(jìn)程。如果一個(gè)進(jìn)程進(jìn)入它自己的關(guān)鍵區(qū)域,那么所有其他試圖進(jìn)入該關(guān)鍵區(qū)域的進(jìn)程都必須等待。③ 進(jìn)入臨界區(qū)的過(guò)程應(yīng)在有限的時(shí)間內(nèi)退出,以便其他過(guò)程能及時(shí)進(jìn)入自己的臨界區(qū)。④ 如果進(jìn)程不能進(jìn)入自己的關(guān)鍵區(qū)域,就應(yīng)該放棄CPU,避免“忙”現(xiàn)象。
臨界資源與臨界區(qū)的區(qū)別?
關(guān)鍵資源是一次只允許一個(gè)進(jìn)程訪問的資源。關(guān)鍵資源的硬件包括打印機(jī)和磁帶機(jī),軟件包括消息緩沖隊(duì)列、變量、數(shù)組和緩沖區(qū)。為了共享這種資源,過(guò)程應(yīng)該是互斥的。在每個(gè)進(jìn)程中訪問關(guān)鍵資源的代碼稱為critical section。顯然,如果能夠保證進(jìn)程互斥地進(jìn)入自己的關(guān)鍵領(lǐng)域,就可以實(shí)現(xiàn)對(duì)關(guān)鍵資源的互斥訪問。因此,在每個(gè)進(jìn)程進(jìn)入關(guān)鍵區(qū)域之前,它應(yīng)該檢查關(guān)鍵資源以查看是否正在訪問它。如果關(guān)鍵資源當(dāng)前未被訪問,則流程可以進(jìn)入關(guān)鍵區(qū)域訪問該資源,并設(shè)置訪問標(biāo)志;如果關(guān)鍵資源當(dāng)前正被流程訪問,則流程不能進(jìn)入關(guān)鍵區(qū)域。