分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
代码如下:
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的读写操作因为是不同的协程所以不用上锁,程序运行一段时间会崩溃,郁闷。。。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2217 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传