package multithreading.pc;
//測試:生產者消費者模型-->利用緩衝區解決:管程法
//生產者,消費者,產品,緩衝區
public
class
testpc
}//生產者
class
productor
extends
thread
//生產
@override
public
void
run()}
}//消費者
class
consumer
extends
thread
//消費
@override
public
void
run()}
}//產品
class
chicken
}//緩衝區
class
syncontainer
catch
(interruptedexception e)
}//如果沒滿,我們就需要丟入產品
chickens[count]
= chicken;
count++
;//可以通知消費者消費了
this
.notifyall()
;}//消費者消費產品
public
synchronized chicken pop()
catch
(interruptedexception e)
}//如果可以消費
count--
; chicken chicken = chickens[count]
;//吃完了,通知生產者生產
來判斷乙個標誌位flag,如果為true,就讓他等待、如果為false,就讓他去通知另外乙個人、把兩人銜接起來,就像咱們的訊號燈紅燈停,綠燈行,通過這樣乙個判斷方式,只要來判斷什麼時候讓他等待,什麼時候將他喚醒就ok。
package multithreading.pc;
//測試生產者消費者問題2:訊號燈法,標誌位解決
public
class
testpc2
}//生產者-->演員
class
player
extends
thread
@override
public
void
run(
)else}}
}//消費者-->觀眾
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)
} system.out.
println
("觀眾**了:"
+voice)
;//通知演員表演
生產者消費者,多執行緒問題
從上乙個小測試當中,我們會發現執行緒之間存在爭奪問題,所以在這裡用上了訊號鎖 include include include include include include include define max size 5 struct data structpro max size sem t ...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...
linux多執行緒 生產者消費者問題
include include define buffer size 8 struct prodcons 初始化緩衝區結構 void init struct prodcons b 將產品放入緩衝區,這裡是存入乙個整數 void put struct prodcons b,int data 寫資料,並...