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

21 lines
1 KiB
Markdown

## once
[sync.Once](https://golang.org/pkg/sync/#Once) решает задачу ленивой инициализации.
Как правило, `sync.Once` используется для того, чтобы гарантировать, что некоторый код многопоточной программы будет выполнен ровно один раз.
### Что нужно сделать?
Нужно написать реализацию Once, используя каналы.
Использование пакета [sync](https://golang.org/pkg/sync) в этой задаче запрещено!
```go
type Once struct {}
func (o *Once) Do(f func()) {}
```
`Do` вызывает функцию `f` тогда и только тогда, когда `Do` вызывается впервые для данного экземпляра `Once`.
Важное свойство: код `f` должен завершиться до того, как завершится любой из конкурентных `Do`.