Search
Write a publication
Pull to refresh

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.

Articles