裝水問題(引入普通變數)

2021-08-31 18:43:14 字數 742 閱讀 7635

///****似乎解法是乙個工人,而不是兩個工人,需要改進****//

問題描述:

兩個搬運工人向卡車中裝純淨水,每車最多20箱。卡車裝滿即開走,需裝10輛車。給出簡單的同步分析及演算法,寫明訊號量的含義和初值

解答 :

設定變數

/***車(互斥)***/

①semaphore m=1

/***工人裝滿20箱水->車就離開(同步)***/

②semaphore go=0

/***記錄車裝水20次,實現車需要裝水->工人裝水(同步),用for迴圈控制裝20次***/

semaphore empty=0

/***設定乙個整形變數count,用於判斷工人是否裝水20次用來響應車離開***/

int count=0

che()

void main(){

for(i=1;i<=20;i++)

che();

work();

work(){

while(true){

wait(empty);

count++;

【empty變數的設定就是為了使count變數加到20用來if語句判斷,從而釋放go變數來讓che()知道已經裝滿20次水車可以離開】

if(count==20)

{signal(go);

【釋放go,che()可以離開了】

count=0; 

【count清零,用於下一次判斷】

普通變數,static變數

普通變數,static變數雖然都是變數,但是他們有很大的區別,下面從儲存區域,初始化值,作用域,生命週期來辨析他們 在同乙個檔案下 測試使用,無意義 void add int a,int b intmain 結果 sum 6356940 tmp的初始化值 53 sum 1944111648通過結果可...

屬性和普通變數區別

1 資料安全 因為a是個公有變數,在類的外部可以任意更改,為了防止因使用者任意更改,可用屬性get set來限制 b的的唯讀 只寫或控制 b的最大或最小 引用一位老兄的簡答 其實自定義變數已經預設實現了屬性,只是簡單的讀寫而已,我們定義的屬性要在讀寫的基礎上加上更多限制,以後你學的多了就會發現,很多...

final變數和普通變數的區別

public class test public static void main string args string a handao final string b han string c han string d b dao string e c dao system.out.println...