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