2 回答

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊
我認(rèn)為出隊goroutine一直在運(yùn)行,試圖從空隊列中出隊,而入隊goroutine卻餓死了。也許嘗試使出隊阻塞來給入隊運(yùn)行的機(jī)會?如果這不僅僅是為了教育價值,我只會使用渠道。
編輯:使用通道的等效版本
package main
import (
"sync"
"fmt"
"time"
"runtime"
)
const (
MAX_DATA_SIZE = 100
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
fmt.Println(runtime.GOMAXPROCS(-1))
var wg sync.WaitGroup
wg.Add(20)
queue := make(chan interface{})
for i := 0; i < 10; i++ {
go func() {
defer wg.Done()
for j := 0; j < MAX_DATA_SIZE; j++ {
t := time.Now()
queue <- t
}
}()
}
for i := 0; i < 10; i++ {
go func() {
var val interface{}
defer wg.Done()
for j := 0; j < MAX_DATA_SIZE; j++ {
val = <- queue
fmt.Println("deq = ",val)
}
}()
}
wg.Wait()
}
- 2 回答
- 0 關(guān)注
- 196 瀏覽
添加回答
舉報