shad-go/waitgroup
2024-06-05 20:36:34 +03:00
..
README.md fix 29 typos 2022-03-08 18:56:01 +03:00
waitgroup.go go fix old build tags. 2022-03-15 23:49:56 +03:00
waitgroup_test.go Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +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.