操作系统(二十二)用信号量机制实现进程互斥、同步、前驱关系
2.3.5 用信號量機(jī)制實現(xiàn)進(jìn)程互斥、同步、前驅(qū)關(guān)系
目錄
2.3.5 用信號量機(jī)制實現(xiàn)進(jìn)程互斥、同步、前驅(qū)關(guān)系
2.3.5.1?用信號量機(jī)制實現(xiàn)進(jìn)程互斥
2.3.5.2?用信號量機(jī)制實現(xiàn)進(jìn)程同步
2.3.5.3?信號量機(jī)制實現(xiàn)前驅(qū)關(guān)系
2.3.5.1?用信號量機(jī)制實現(xiàn)進(jìn)程互斥
? 由之前的學(xué)習(xí)我們知道進(jìn)程互斥就是在同一時間訪問臨界資源的進(jìn)程只能有一個。并且P操作是申請資源并上鎖的原語,V操作時釋放資源并解鎖的原語,我們引用一個互斥信號量mutex表示進(jìn)入臨界區(qū)的名額,并設(shè)置初值為1來實現(xiàn)進(jìn)程互斥。
? ?1. 分析并發(fā)進(jìn)程的關(guān)鍵活動,劃定臨界區(qū)(如:對臨界資源打印機(jī)的訪問就應(yīng)放在臨界區(qū))
? ?2. 設(shè)置互斥信號量 mutex,初值為 1
? ?3. 在進(jìn)入?yún)^(qū) P(mutex)——申請資源
? ?4. 在退出區(qū) V(mutex)——釋放資源 這里需要注意:P(mutex)與V(mutex)必須成對存在,如果缺少P那么互斥性就不可以保證,如果缺少V就導(dǎo)致資源不能解鎖,并且等待進(jìn)程永遠(yuǎn)不會被喚醒。2.3.5.2?用信號量機(jī)制實現(xiàn)進(jìn)程同步
? 進(jìn)程同步就是將并發(fā)進(jìn)程按照一定要求有序推進(jìn),以解決并發(fā)性帶來的問題。
??1. 分析什么地方需要實現(xiàn)“同步關(guān)系”,即必須保證“一前一后”執(zhí)行的兩個操作(或兩句代碼)
? 2. 設(shè)置同步信號量 S, 初始為 0
3. 在“前操作”之后執(zhí)行 V(S) 4. 在“后操作”之前執(zhí)行 P(S) 以下面的操作為例,解釋一下這四個步驟的原因: semaphore S = 0; //初始化同步信號量,初值為0P1(){操作1;操作2;V(S);操作3; }P2(){P(S);操作4;操作5;操作6; }? 以上的代碼可以保證操作2發(fā)生在操作4之前。因為異步性導(dǎo)致的問題我理解就是資源不足,因為第二步需要第一步所帶的資源。所以同步信號量設(shè)為了0而非1(1的話意思就是資源十分充足,誰想用訪問就行)。因為操作2要發(fā)生在操作4之前就是說操作2要為操作4帶來所需資源,所以解鎖就是釋放資源,一定要在前操作之后使用。
2.3.5.3?信號量機(jī)制實現(xiàn)前驅(qū)關(guān)系
? 前驅(qū)關(guān)系就是一個同步問題,即某一操作必須在一個操作之后。下圖所示的前驅(qū)關(guān)系:S2必須在S1之后產(chǎn)生,S6必須在S4 S5 S3都完成之后進(jìn)行。
實現(xiàn)步驟如下:
??1. 要為每一對前驅(qū)關(guān)系各設(shè)置一個同步信號量
? 2. 在“前操作”之后對相應(yīng)的同步信號量執(zhí)行 V 操作
? 3. 在“后操作”之前對相應(yīng)的同步信號量執(zhí)行 P 操作
總結(jié)
以上是生活随笔為你收集整理的操作系统(二十二)用信号量机制实现进程互斥、同步、前驱关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这些数据分析方法你都掌握了么
- 下一篇: B端产品如何应对个性化需求