list操作崩溃

binghan1589 · · 1624 次点击
stevewang
耶和华是我的牧者,我必不至缺乏。
DataList在多个goroutine里同时被读写,存在数据竞争,需要做线程同步。
#1
更多评论
stevewang
耶和华是我的牧者,我必不至缺乏。
``` package main import ( "container/list" "fmt" "sync" "time" ) var Ch = make(chan int) var DataList = list.New() var mutex sync.Mutex func ReadChan() { for { data := <-Ch fmt.Println(data) } } func WriteChan() { for { mutex.Lock() if size := DataList.Len(); size > 0 { data := DataList.Front() if data.Value != nil { Ch <- data.Value.(int) DataList.Remove(data) } mutex.Unlock() } else { mutex.Unlock() time.Sleep(100 * time.Millisecond) } } } func feed() { for { for i := 0; i < 20; i++ { mutex.Lock() DataList.PushBack(i) mutex.Unlock() } time.Sleep(150 * time.Millisecond) } } func main() { go WriteChan() for i := 0; i < 5; i++ { go ReadChan() } feed() } ```
#2
谢谢!确实少了上锁
#3