回覆列表
-
1 # nolzh41362
-
2 # 使用者8658786613831
同步關係
設訊號量e(表示盤子為空),a(表示盤子裡是蘋果),o(表示盤子裡是桔子)
inte=1,a=o=0;
main()
{father();
//son();
//daughter();/*三個為併發程序*/
}
father()
{while(1)
{洗水果
wait(e)
把水果放入盤子
if(水果是蘋果)signal(a)
elsesignal(o)
}
}
son()
{while(1)
{wait(o)
從盤子裡取桔子
signal(e)
吃桔子}
}
daughter()
{while(1)
{wait(a)
從盤子裡取蘋果
signal(e)
吃蘋果}
}
我們把非同步環境下的一組併發程序因直接制約而互相傳送訊息而進行互相合作、互相等待,使得各程序按一定的速度執行的過程稱為程序間的同步。具有同步關係的一組併發程序稱為合作程序,合作程序間互相傳送的訊號稱為訊息或事件。 如果我們對一個訊息或事件賦以唯一的訊息名,則我們可用過程wait(訊息名)表示程序等待合作程序發來的訊息,而用過程signal(訊息名)表示向合作程序傳送訊息。 等待物件的同步鎖,需要獲得該物件的同步鎖才可以呼叫這個方法,否則後收到一個錯誤訊號,這個是執行時異常。呼叫這個方法後,就放棄了這個同步鎖了。如果不帶引數的wait方法就只有等別人喚醒了,如果帶一個引數的話就設定等待最長時間,過了這個時間即使沒有人喚醒這個執行緒也不再等待了。