阻塞狀態
正在進行的進程由於發生某事件而暫時無法繼續執行時,便放棄處理機而處於暫停狀態,亦即進程的執行受到阻塞,我們把這種暫停狀態叫阻塞進程阻塞,有時也成為等待狀態或封鎖狀態。通常這種處於阻塞狀態的進程也排成一個佇列。有的系統則根據阻塞原因的不同而處於阻塞狀態進程排成多個佇列。
進程阻塞的典型事件
進程阻塞的典型事件有:生產者/消費者問題,理髮店問題
生產者/消費者問題
生產者/消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem)通常可描述為有一個或多個生產者產生某種類型的數據(記錄、字元),並放置在緩衝區中,有一個消費者從緩衝區中取數據,每次取一項;系統保證避免對緩衝區的重複操作,也就是說,在任何時候只有一個代理(生產者或消費者)可以訪問緩衝區。生產者的是生成一定量的數據放到緩衝區中,然後重複此過程。與此同時,消費者也在緩衝區消耗這些數據。該問題的關鍵就是要保證生產者不會在緩衝區滿時加入數據,消費者也不會在緩衝區中空時消耗數據,否則會造成阻塞。
理髮店問題
如果理髮店中顧客數已滿,新來的就不能再進入。顧客一旦進入理髮店,可以坐在沙發上等待,如果沙發已座滿就站著。當一位理髮師空閒時,在沙發上坐的時間最久的顧客得到服務,並且,如果還有顧客站著,進入理髮店站的時間最久的顧客就可以坐在沙發上。當一位顧客理髮結束後,任何理髮師都可以接受付款,但由於只有一台收銀機,因此一次只能有一位顧客付款。理髮店人滿後的這種狀態就是進程阻塞狀態。