多執行緒 多個生產者多個消費者問題

2021-10-03 13:58:37 字數 1324 閱讀 9644

還是之前的問題:廚師負責做菜,服務員負責給客人上菜,廚師做好的菜放在工作台上,服務員從工作台上取菜品,但是這次的廚師和服務員都有多個.

首先建立出多個廚師和多個服務員是很簡單的,為了方便,我們給執行緒重新命名一下,做乙個標記,在後面方便進行觀察.

public

class

testcommunicate

}//因為要保證cook和waiter使用的是同乙個workbench的物件,我們用傳引數的方式

class

cook

extends

thread

public

void

run(

)catch

(interruptedexception e)

w.put();

}}}class

waiter

extends

thread

public

void

run(

)catch

(interruptedexception e)

w.take()

;}}}

下面是工作台的功能設計,我們要解決的問題是:

(1)廚師和服務員都有多個,我們在廚師做菜和服務員取菜時,怎麼能讓執行緒在資料處理的時候不發生錯誤.

(2)notify()方法喚醒執行緒,是隨機喚醒的,要防止執行緒的迴圈等待.

class

workbench

catch

(interruptedexception e)

} num--

; system.out.

println

("服務員"

+thread.

currentthread()

.getname()

+"拿走了乙份菜剩餘"

+num)

;this

.notifyall()

;}public

synchronized

void

put(

)catch

(interruptedexception e)

} num++

; system.out.

println

("廚師"

+thread.

currentthread()

.getname()

+"又炒好了乙份菜剩餘"

+num)

;this

.notifyall()

;}}

生產者消費者,多執行緒問題

從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 include include include include include include include define max size 5 struct data structpro max size sem t ...

多執行緒 生產者消費者問題

package multithreading.pc 測試 生產者消費者模型 利用緩衝區解決 管程法 生產者,消費者,產品,緩衝區 public class testpc 生產者 class productor extends thread 生產 override public void run 消費...

作業系統多個生產者多個消費者問題

題目如下 一家人吃水果問題是生產者消費者問題的一種變形。問題如下 桌子上有乙隻盤子,每次只能放乙個水果 爸爸專向裡面放蘋果,媽媽專放桔子 兒子專吃蘋果,女兒專吃桔子 僅當盤子空閒時,爸爸媽媽才可以向裡面放水果 僅當盤子裡有自己需要的水果時,兒子女兒才可以從裡面取出乙隻水果。試利用執行緒模擬這個問題,...