💡 Atomic Boolean library for cleaner Go code, optimized for performance yet simple to use.
Go to file
Lucas Rouckhout 9a297a52be Implement the Unmarshaler and Marshaler interfaces.
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.
2021-04-28 16:48:48 +02:00
.gitignore Initial commit 2016-05-25 11:28:42 +08:00
LICENSE Initial commit 2016-05-25 11:28:42 +08:00
README.md Add IsNotSet() 2020-07-16 14:46:58 +08:00
bool.go Implement the Unmarshaler and Marshaler interfaces. 2021-04-28 16:48:48 +02:00
bool_test.go Implement the Unmarshaler and Marshaler interfaces. 2021-04-28 16:48:48 +02:00
go.mod Create module github.com/tevino/abool 2020-07-16 13:14:16 +08:00

README.md

ABool 💡

Go Report Card GoDoc

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