通读几个列表,我想将每个列表中的所有行添加到一个大数组中。我在自己的goroutine中运行每个列表阅读器。我可以在读取后立即添加一行吗?
此线程是否保存或可以在我手中爆炸?
type listHolder {
entries []entry
}
func (h *listHolder) readAllLists(s []list) {
c := make(chan list)
var wg sync.WaitGroup
for _, l := range s {
wg.Add(1)
go h.readSomeList(&wg, l)
}
c.close()
wg.Wait()
}
func (h *listHolder) readSomeList(wg *sync.WaitGroup, l list) {
defer wg.Done()
for e := range extractEntry(l) {
h.entries = append(h.entries, newEntry(e))
}
}
答案 0 :(得分:0)
这样的事情就可以了。或者您可能想考虑一个不同的体系结构,例如使用通道将更新提供给一个go例程
type listHolder {
entries []entry
m sync.Mutex
}
func (h *listHolder) readAllLists(s []list) {
c := make(chan list)
var wg sync.WaitGroup
for _, l := range s {
wg.Add(1)
go h.readSomeList(&wg, l)
}
c.close()
wg.Wait()
}
func (h *listHolder) readSomeList(wg *sync.WaitGroup, l list) {
defer wg.Done()
for e := range extractEntry(l) {
h.m.Lock()
h.entries = append(h.entries, newEntry(e))
h.m.Unlock()
}
}