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

29 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## waitgroup
[sync.WaitGroup](https://golang.org/pkg/sync/#WaitGroup) решает задачу ожидания завершения всех горутин из набора.
### Что нужно сделать?
Нужно написать реализацию WaitGroup используя каналы.
Использование пакета [sync](https://golang.org/pkg/sync) в этой задаче запрещено!
```go
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`.