一、只使用channel實現
二、條件變數加channelpackage main
import
("fmt"
"math/rand"
"sync"
"time"
)//生產者函式
func
producter
(index int
,ch chan
<-
int)
}//消費者函式
func
consumer
(index int
,ch <-
chan
int)
}func main
//建立5個消費者go程
for i:=
0;i<
5;i++
//保證主go程不退出
for}
package main
import
("fmt"
"math/rand"
"time"
)//條件變數
var cond sys.cond
//共享資料
var num int
//生產者函式
func
producter
(index int
,ch chan
<-
int)
}//消費者函式
func
consumer
(index int
,ch <-
chan
int)
num:=
<-ch
fmt.
printf
("消費者go程 %d 消費:%d\n"
,index,num)
//喚醒阻塞的生產者執行緒
cond.
signal()
cond.l.
unlock()
time.
sleep
(time.second)
} num:=
<-ch
fmt.
printf
("消費者%d消費:%d\n"
,index,num)}}
func main
//迴圈建立消費者go程
for i :=
0; i <
5; i++
for;
;}
Go語言實現生產者消費者問題
某個模組負責產生資料,這些資料由另乙個模組來負責處理 此處的模組是廣義的,可以是類 函式 執行緒 程序等 產生資料的模組,就形象地稱為生產者 而處理資料的模組,就稱為消費者。單單抽象出生產者和消費者,還夠不上是生產者 消費者模式。該模式還需要有乙個緩衝區處於生產者和消費者之間,作為乙個中介。生產者把...
生產者消費者模型
1.生產者消費者問題 producer consumer 有限緩衝,多執行緒同步。生產者執行緒和消費者執行緒共享固定大小緩衝區。2.關鍵是保證生產者不會再緩衝區滿時加入資料,消費者不會在緩衝區空時消耗資料。3.解決辦法 讓生產者在緩衝區滿時休眠,等下次消費者消耗緩衝區中的資料的時候,生產者才能被喚醒...
生產者消費者模型
生產者與消費者 3,2,1 三種關係 生產者與消費者 互斥,同步 消費者與消費者 互斥 生產者與生產者 互斥 條件變數 int pthread cond destroy pthread cond t cond int pthread cond init pthread cond t restrict...