2 回答
TA贡献1765条经验 获得超5个赞
我认为出队goroutine一直在运行,试图从空队列中出队,而入队goroutine却饿死了。也许尝试使出队阻塞来给入队运行的机会?如果这不仅仅是为了教育价值,我只会使用渠道。
编辑:使用通道的等效版本
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 关注
- 172 浏览
添加回答
举报