某系統中有乙個緩衝區,程序p1不斷地將資料寫入緩衝區,程序p2不斷地從緩衝區中取出資料進行處理。假設該快取區只能容納n個資料,且一開始緩衝區為空,試著用wait(),signal()語句描述其同步互斥關係(即pv操作)。
解:
// 訊號量的宣告如下
semaphore mutex=1;
semaphore empty=n;
semaphore full=0;
// p1程序(生產者)p1(
)}
// p2程序(消費者)p2(
)}
從上面的**我們可以清楚地將步驟分為三步:
(1)確定需要宣告定義的訊號量的對應的代表關係(同步or互斥)和初值 ;
(2)宣告訊號量——semaphore;
(3)完成具體的程式(生產者程序和消費者程序)
其實,很多問題的本質都是消費者、生產者問題,這種題,掌握一種方法就可以了。
需要注意的是:
經典程序同步問題
文章出處 http heikediguo2005.blog.163.com blog static 2211971200910254235533 依據訊號量與程序的關係,我們可把程序中使訊號量分成私用訊號量和公用訊號量。私有訊號量是指只與制約程序和被制約程序有關的訊號量 公用訊號量是指與一組併發程序...
經典程序同步問題
wait表示為訊號量減一,當訊號量不夠減時 訊號量 0 時 說明當前資源不足,發出資源請求的程序阻塞直到資源可達。signal 表示為訊號量加一,表示釋放了當前訊號量所指代的資源。兩者都是原子操作,不可打斷。生產者不停的向訊息佇列中生產訊息,消費者則不停的從訊息佇列中獲取訊息。當訊息佇列滿時,生產者...
經典程序同步問題
生產者消費者問題 是同步互斥的綜合。乙個生產者程序和乙個消費者程序共享乙個初始為空 大小為n的緩衝區。緩衝區沒滿生產者才能放東西,緩衝區不空消費者才能取東西。設定三個訊號量,mutex表示對緩衝區的互斥訪問,初值為1。empty表示還沒有被訊息佔據的緩衝區大小,初值為n。full表示已經被訊息佔據的...