GoCollections/concurrent/Once.go

20 lines
216 B
Go

package concurrent
import (
"sync"
"unsafe"
)
type (
Once sync.Once
)
func (o *Once) Do(f func()) {
(*sync.Once)(o).Do(f)
}
func (o *Once) IsDone() bool {
i := *(*uint32)(unsafe.Pointer(o))
return i != 0
}