PV操作經(jīng)典問題

PV(wait/singal)在考操作系統(tǒng)的時(shí)候經(jīng)常被問到,這篇小文就整理一下幾個(gè)常見的PV問題。

1. 生產(chǎn)者-消費(fèi)者問題

假定在生產(chǎn)者和消費(fèi)者之間的公用緩沖池中,具有n個(gè)緩沖區(qū),這時(shí)可利用互斥信號(hào)量mutex實(shí)現(xiàn)諸進(jìn)程對(duì)緩沖池的互斥使用。利用信號(hào)量empty和full分別表示緩沖池中空緩沖區(qū)和滿緩沖區(qū)的數(shù)量。

又假定這些生產(chǎn)者和消費(fèi)者相互等效,只要緩沖池未滿,生產(chǎn)者便可以將消息送入緩沖池;只要緩沖池未空,消費(fèi)者便可以從緩沖池取走一個(gè)信息。

對(duì)生產(chǎn)者和消費(fèi)者問題可以描述如下:

mutex, empty, full : semaphore := 1, n, 0;
buffer : array[0, ..., n-1] of item;
in, out : integer := 0, 0;

producer() {
    while(true) {
        ...
        produce an item nextp;
        ...
        wait(empty);
        wait(mutex);
        buffer[in]=nextp;
        in=(in+1)%n;
        single(mutex);
        signal(full);
    }
}

consumer() {
    while(true) {
        wait(full);
        wait(mutex);
        p=buffer[out];
        out=(out+1)%n;
        single(mutex);
        signal(empty);
        ...
        consume product p 
        ...
    }
}

2. 哲學(xué)家進(jìn)餐問題

該問題是描述有五個(gè)哲學(xué)家共用一張圓桌,分別坐在周圍的五張椅子上,在圓桌上有五只筷子和五個(gè)碗,他們的生活方式是交替地進(jìn)行思考和進(jìn)餐。平時(shí),一個(gè)哲學(xué)家進(jìn)行思考,饑餓時(shí)便試圖取用其左右最靠近他的筷子,只有他拿到兩只筷子的時(shí)候才能進(jìn)行進(jìn)餐。進(jìn)餐完畢,放下筷子繼續(xù)思考。

process(i) {//第i個(gè)哲學(xué)家
    while(true) {
        think;
        sswait(chopstick[(i+1)%5],chopstick[i]);
        eat;
        ssignal(chopstick[(i+1)%5],chopstick[i]);   
    }
}

這是使用AND機(jī)制的信號(hào)量處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容