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