shad-go/waitgroup/README.md
2022-03-08 18:56:01 +03:00

1.4 KiB
Raw Blame History

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.