代码如下: package main
import ( "container/list" "fmt" "time" )
var Ch = make(chan int) var DataList = list.New()
func ReadChan() { for { data := <-Ch fmt.Println(data) } }
func WriteChan() { for { if size := DataList.Len(); size > 0 { data := DataList.Front() if data.Value != nil { Ch <- data.Value.(int) DataList.Remove(data) }
} else {
time.Sleep(100 * time.Millisecond)
}
}
}
func feed() { for { for i := 0; i < 20; i++ { DataList.PushBack(i) } time.Sleep(150 * time.Millisecond) } }
func main() {
go WriteChan()
for i := 0; i < 5; i++ {
go ReadChan()
}
feed()
}
本意是写入的数据放入list中缓存,然后协程写入chan, 其他协程读出,对list的读写操作因为是不同的协程所以不用上锁,程序运行一段时间会崩溃,郁闷。。。
有疑问加站长微信联系(非本文作者)

DataList在多个goroutine里同时被读写,存在数据竞争,需要做线程同步。
谢谢!确实少了上锁