я обычно использовал semaphore, но сейчас смотрю на реализцию на каналах и понял что не до конца понимаю
running := make(chan bool, 3)
for i := 1; i <= 10; i++ {
running <- true
go func() {
<-running
}()
}
Почему в этом случае у нас нет дээдлока? Если же сделать без цикла, просто записей/считываний больше чем 3, то получим дэдлок. Можете объяснить этот момент?
вопрос не ясен что вы называете дедлоком?
а почему должен быть дедлок? у вас в один момент времени есть 4 горутины — основная(в которой исполняется цикл) и три запущенных когда канал при записи running <- true блокирует горутину, Go начинает исполнять остальные горутины, освобождая буфер в канале чтением <-running после чего горутина с циклом может быть разблокирована
прояснилось, спасибо!)
а где в примере чтение из канала...?: или вы это подразумеваете априори?
Обсуждают сегодня