shad-go/once/README.md

22 lines
1 KiB
Markdown
Raw Normal View History

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