用執行緒解決生產者消費者問題

2021-06-09 19:52:00 字數 1262 閱讀 2268

問題描述:

生產者和消費者問題,我想大家肯定都很熟悉。就是有生產者在生產,生產出的產品(我們在這裡用窩頭來作比喻)放到乙個籃子裡,然後有消費者拿籃子裡的窩頭來吃。

問題分析:

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...