進(jìn)程同步 summarize
重點(diǎn)是同步算法設(shè)計(jì)腾降!
但是前面的知識(shí)點(diǎn)也順便整理了一下
制約關(guān)系
1. 同步:需要在某些位置上協(xié)調(diào)進(jìn)程之間的工作次序而等待、傳遞信息產(chǎn)生的制約關(guān)系
2. 互斥:當(dāng)一個(gè)進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時(shí)而晒,其他要求”進(jìn)入臨界區(qū)“或”進(jìn)區(qū)“必須等待
臨界資源:一次僅允許一個(gè)進(jìn)程是用的資源
臨界區(qū)互斥-原則:空閑讓進(jìn)蝇狼,忙則等待,有限等待倡怎,讓權(quán)等待
軟件實(shí)現(xiàn) | 硬件實(shí)現(xiàn)
Peterson’s Algorithm
IMG_8788.JPG
信號(hào)量
P(wait(S)) V(signal(S)) 操作
是原語(yǔ)操作
簡(jiǎn)單來(lái)說(shuō)迅耘,PV操作緊緊夾著使用互斥資源的行為贱枣,如果需要某種資源你就P一下,V一下標(biāo)志著已經(jīng)完成,提供了某種資源
經(jīng)典同步問(wèn)題
生產(chǎn)者-消費(fèi)者問(wèn)題
只能放一種水果所以dad 和mom是互斥關(guān)系颤专,mom和son纽哥,dad和daughter是同步關(guān)系,所以這兩對(duì)進(jìn)程必須連起來(lái)
semaphore plate=1, apple=0, orange=0;
dad(){
while(1){
prepare an apple;
P(plate);//互斥放水果
put the apple;//互斥行為
V(apple);//允許取蘋(píng)果
}
}
mom(){
//...
}
son(){
while(1){
P(orange);//互斥取橘子
take an orange;
V(plate);//釋放盤(pán)子
}
}
daught(){
//...
}
哲學(xué)家就餐問(wèn)題
哲學(xué)家是和貪心算法相反的思路栖秕,如果按照貪心的思路春塌,有筷子就拿起筷子,就會(huì)出現(xiàn)死鎖簇捍。
semaphore chopstick[5] = {1,1,1,1,1};
semaphore mutex = 1;
Pi(){
do{
P(mutex);//如果沒(méi)有這條會(huì)死鎖
P(chopstick[i]);
P(chopstick[(i+1)%5]);//取右邊筷子
V(mutex);//釋放取筷子的 信號(hào)量
eat;
V(chopstick[i]);
V(chopstick[(i+1)%5]);
think;
}while(1);
}
2013聯(lián)考題
某博物館最多可容納500人同事餐館只壳,有一個(gè)出入口,該出入口一次只允許一人通過(guò)
請(qǐng)?zhí)砑有盘?hào)量并寫(xiě)出完整過(guò)程
分析:只允許一個(gè)人出入則需要設(shè)置出入口的互斥量暑塑,并且設(shè)置容納量為500
對(duì)應(yīng)出入操作的時(shí)候修改容納量和互斥量
參觀者進(jìn)程
{
P(empty);//先check容納量并-1
P(mutex);
進(jìn)門(mén);
V(mutex);//此時(shí)門(mén)可以使用
參觀;
P(mutex);//參觀結(jié)束吼句,使用門(mén)
出門(mén);
V(mutex);
V(empty);//可接納容量+1
}