shad-go/waitgroup
Arseny Balobanov f60393b042 Add waitgroup.
2021-03-05 14:31:48 +03:00
..
README.md Add waitgroup. 2021-03-05 14:31:48 +03:00
waitgroup.go Add waitgroup. 2021-03-05 14:31:48 +03:00
waitgroup_test.go Add waitgroup. 2021-03-05 14:31:48 +03:00

waitgroup

sync.WaitGroup решает задачу ожидания завершения всех горутин из набора.

Что нужно сделать?

Нужно написать реализацию WaitGroup используя каналы.

Использование пакета sync в этой задаче запрещено!

type WaitGroup struct {}

func (wg *WaitGroup) Add(delta int) {}
func (wg *WaitGroup) Done() {}
func (wg *WaitGroup) Wait() {}

WaitGroup можно представлять себе как число.

  • При инициализации переменной типа WaitGroup число равно нулю.
  • Вызов Add прибавляет delta к числу.
  • Вызов Done вычитает из числа единицу.
  • Если при вызове Add или Done число становится отрицательным, происходит panic.
  • Вызов Wait при числе равном нулю -- это no-op.
  • Вызов Wait при числе большем нуля блокируется до тех пор, пока число не станет равным нулю.

WaitGroup может быть "переиспользована". После достижения нуля можно вызвать Add заблокировав последующий Wait.