GoCollections/concurrent/Once.go

26 lines
375 B
Go
Raw Normal View History

2022-11-25 18:19:33 +08:00
/*
* 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.
*/
2022-10-31 20:54:53 +08:00
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
}