💡 Atomic Boolean library for cleaner Go code, optimized for performance yet simple to use.
Go to file
Tevin Zhang 17b218e8c9
Update benchmark to Go 1.14.3 on Linux
Assuming that Linux is a more popular platform than Darwin when running
this package
2020-07-16 13:51:29 +08: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 Update benchmark to Go 1.14.3 on Linux 2020-07-16 13:51:29 +08:00
bool.go Change return type of Toggle to simple bool 2020-07-07 15:33:59 +08:00
bool_test.go Change return type of Toggle to simple bool 2020-07-07 15:33:59 +08: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 library for Go, optimized for performance yet simple to use.

Use this for cleaner code.

Usage

import "github.com/tevino/abool"

cond := abool.New()     // default to false

cond.Set()              // Set to true
cond.IsSet()            // Returns true
cond.UnSet()            // Set to false
cond.SetTo(any)         // Set 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