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

2021-10-03 20:43:46 字數 2134 閱讀 4855

但是很多時候執行緒之間僅僅同步是不夠的,還需要不同執行緒之間的訊息傳遞通訊,因此,提出了生產者消費者問題。

問題的提出:

對於生產者,在生產產品之前需要通知消費者等待,當生產完需要通知消費者消費。

對於消費者,在消費完以後需要通知生產者生產產品,當產品為空時需要等待。

當我們把生產者和消費者當做兩個執行緒來看待時,就需要執行緒之間的通訊才能解決上面的問題了。

方法名方法說明

wait()

使執行緒處於等待狀態並且釋放鎖,直到其它執行緒通知

wait(long timeout)

指定等待的毫秒數

notify()

喚醒處於等待狀態的執行緒

notifyall()

喚醒同一物件上所有呼叫wait()方法的執行緒,優先級別高的執行緒優先排程

public

class

testpc

}//生產者

class

productor

extends

thread

@override

public

void

run()}

}//消費者

class

consumer

extends

thread

@override

public

void

run()}

}//產品(kfc)

class

chicken

}//緩衝區

class

syncontainer

catch

(interruptedexception e)

} chickens[count]

= chicken;

count++

;this

.notify()

;}//消費者從容器取出產品

public

synchronized chicken pop()

catch

(interruptedexception e)

} count--

; chicken chicken = chickens[count]

;this

.notify()

;return chicken;

}}

public

class

testpc

}//生產者(演員)

class

player

extends

thread

@override

public

void

run()}

}//消費者(觀眾)

class

watcher

extends

thread

@override

public

void

run()}

}//產品(節目)

class

tvcatch

(interruptedexception e)

} system.out.

println

("演員表演了:"

+voice)

;this

.notifyall()

;this

.voice = voice;

this

.flag =

!this

.flag;

}//觀眾**

public

synchronized

void

watch()

catch

(interruptedexception e)

}this

.notifyall()

; system.out.

println

("觀眾**了:"

+voice)

;this

.flag =

!this

.flag;

}}

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

從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 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 消費...

多執行緒 生產者消費者

這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...