問題描述:
生產者和消費者問題,我想大家肯定都很熟悉。就是有生產者在生產,生產出的產品(我們在這裡用窩頭來作比喻)放到乙個籃子裡,然後有消費者拿籃子裡的窩頭來吃。
問題分析:
1、條件分析,如果生產者生產了窩頭,就應該叫消費者來吃;如果自己生產的窩頭把籃子都裝滿了,就要先停下來,然後通知消費者去吃窩頭;同理,消費者吃了窩頭,應該叫生產者生產窩頭,如果自己把籃子裡的饅頭都消費了,那麼,就要先停下來,然後通知生產者生產窩頭。
2、我們用物件導向的分析方法來分析這個問題:
其中的物件有:生產者(producer)、消費者(consumer)、籃子(syncstack)、窩頭(wotou)
我寫的**如下:
public class producerconsumer
}class wotou
public string tostring() }
//生產池
class syncstack
catch(interruptedexception e)
}notify();
arraywotou[index]=wt;
index++; }
//消費者從生活池中消費窩頭
public synchronized wotou pop()
catch(interruptedexception e)
}notify();
//先要index--因為index記錄的是當前窩頭的個數
index--;
return arraywotou[index]; }}
//生產者
class producer implements runnable
public void run() }
}//消費者
class consumer implements runnable
public void run() }
}
執行結果如下:
注意:
1、乙個時間點只有乙個程序在這個物件上
2、如果是多個生產者或者消費者的話,生產和消費的數量應該一致,比如說如果再增加兩個生產者,每個生產者都還是生產20個,可是只有乙個消費者,總共消費20個,會出現滿的情況;還有就是呼叫notifyall(),在這個物件上的執行緒一哄而起,誰搶到算誰的。
細節問題請參考api文件。。。
利用執行緒解決生產者 消費者問題
ubuntu 下qt creator 比 codeblocks 更好用。然而vs比qt creator 好用很多,可是win不支援pthread.h。qt creator缺點是要配置一下才能輸入中文。谷歌一下就行。超級無敵爽。至於vim,應該是ide裝vim外掛程式,利用vim的普通模式,而不是vi...
生產者消費者執行緒
include include include includeusing namespace std typedef int semaphore 訊號量是一種特殊的整型變數 const int size of buffer 5 緩衝區長度 const unsigned short producers...
生產者消費者執行緒
該簡單生產者 消費者執行緒,屬於本人學習過程中的一段練習 如有不足,請指點 package com.lanqiao.demo3 author 大廣子 類說明 簡單的生產者,消費者執行緒 public class threadptcs catch interruptedexception e 退出 s...