GoCollections/concurrent/Once.go
2022-11-25 18:19:33 +08:00

26 lines
375 B
Go

/*
* Copyright (c) 2022 tursom. All rights reserved.
* Use of this source code is governed by a GPL-3
* license that can be found in the LICENSE file.
*/
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
}