生產者消費者問題

2021-09-13 16:06:36 字數 1513 閱讀 4693

1. 使用棧來存放資料

1.1 把棧改造為支援執行緒安全

1.2 把棧的邊界操作進行處理,當棧裡的資料是0的時候,訪問pull的執行緒就會等待。 當棧裡的資料是10的時候,訪問push的執行緒就會等待

2. 提供乙個生產者(producer)執行緒類,生產隨機大寫字元壓入到堆疊

3. 提供乙個消費者(consumer)執行緒類,從堆疊中彈出字元並列印到控制台

4. 提供乙個測試類,使兩個生產者和三個消費者執行緒同時執行,結果類似如下 

該程式主要有兩部分**:

(一)自定義的執行緒安全棧(如下所示)。

用wait(), notify(), notifyall實現

public class pcstack catch (interruptedexception e1) 

if(stacks.size()>=10) catch (interruptedexception e) ;

}else

}public synchronized character pull() catch (interruptedexception e1)

if(stacks.size()<=0) catch (interruptedexception e)

return null;

}else }

public synchronized character peek()

}

使用condition物件的:await, signal,signalall 方法實現

public class pcstack catch (interruptedexception e1) 

if(stacks.size()>=10) catch (interruptedexception e) ;

}else

lock.unlock();

}public character pull() catch (interruptedexception e1)

if(stacks.size()<=0) catch (interruptedexception e)

return null;

}else }

public synchronized character peek()

}

(二)測試類,其中有兩個生產者和三個消費者(**如下所示)。

public class p_c ;

final pcstack mystack=new pcstack();

for(int i=0;i<3;i++) }};

producter.start();

} for(int i=0;i<2;i++) }}

};consumer.start();

} }}

生產者消費者問題

public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...

生產者 消費者問題

在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...

生產者 消費者問題

1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...