GO語言實現生產者消費者模型

2021-10-07 01:13:50 字數 1258 閱讀 7665

一、只使用channel實現

package 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}

二、條件變數加channel
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...