forked from mirror/abool
9a297a52be
This allows an AtomicBool to be Unmarshalled from the JSON representation of a normal boolean and respectively marshall it into the JSON representation of normal booleans. This makes it easier to use AtomicBool in structs. For they can now be read from JSON files and serialized back into them. |
||
---|---|---|
.gitignore | ||
LICENSE | ||
README.md | ||
bool.go | ||
bool_test.go | ||
go.mod |
README.md
ABool 💡
Atomic Boolean package for Go, optimized for performance yet simple to use.
Designed for cleaner code.
Usage
import "github.com/tevino/abool"
cond := abool.New() // default to false
cond.Set() // Sets to true
cond.IsSet() // Returns true
cond.UnSet() // Sets to false
cond.IsNotSet() // Returns true
cond.SetTo(any) // Sets to whatever you want
cond.SetToIf(new, old) // Sets to `new` only if the Boolean matches the `old`, returns whether succeeded
cond.Toggle() // Inverts the boolean then returns the value before inverting
// embedding
type Foo struct {
cond *abool.AtomicBool // always use pointer to avoid copy
}
Benchmark
- Go 1.14.3
- Linux 4.19.0
goos: linux
goarch: amd64
# Read
BenchmarkMutexRead-4 86662128 14.2 ns/op
BenchmarkAtomicValueRead-4 1000000000 0.755 ns/op
BenchmarkAtomicBoolRead-4 1000000000 0.720 ns/op # <--- This package
# Write
BenchmarkMutexWrite-4 76237544 13.6 ns/op
BenchmarkAtomicValueWrite-4 79471124 14.9 ns/op
BenchmarkAtomicBoolWrite-4 178218270 6.73 ns/op # <--- This package
# CAS
BenchmarkMutexCAS-4 29416574 34.7 ns/op
BenchmarkAtomicBoolCAS-4 171900002 7.14 ns/op # <--- This package
# Toggle
BenchmarkMutexToggle-4 35212117 34.5 ns/op
BenchmarkAtomicBoolToggle-4 169871972 7.02 ns/op # <--- This package
Special thanks to contributors
- @barryz
- Added the
Toggle
method
- Added the