Comments 6
Количество системных потоков регулирует планировщик Go (через
GOMAXPROCS
).
Одновременных threads
Не закрывайте канал, если кто-то еще пишет в него.
А как вы узнаете что в него кто-то еще пишет?
И еще ничего не сказано о errgroup
Последний пример с каналами - там же гонка
Гонки там нет, но решение... Странное.
Хотя бы тем, что если уж "счётчик", просто инкрементится, то логичнее канал пустых структур, а не интов.
Хотя как пример работы - сойдёт
Апд: а, сорри, ступил. Вызов Value() в отдельных рутинах а процессе инкремента даст гонку
type ChanCounter struct {
ch chan int
value int
mu sync.Mutex
}
func (c *ChanCounter) run() {
for v := range c.ch {
c.mu.Lock()
c.value += v
c.mu.Unlock()
}
}
func (c *ChanCounter) Value() int {
c.mu.Lock()
defer c.mu.Unlock()
return c.value
}
Спасибо, простое решение устранить гонку
Sign up to leave a comment.
Потоки, горутины, синхронизация и мьютексы в Go