1# ABool :bulb: 2[![Go Report Card](https://goreportcard.com/badge/github.com/tevino/abool)](https://goreportcard.com/report/github.com/tevino/abool) 3[![GoDoc](https://godoc.org/github.com/tevino/abool?status.svg)](https://godoc.org/github.com/tevino/abool) 4 5Atomic Boolean library for Golang, optimized for performance yet simple to use. 6 7Use this for cleaner code. 8 9## Usage 10 11```go 12import "github.com/tevino/abool" 13 14cond := abool.New() // default to false 15 16cond.Set() // Set to true 17cond.IsSet() // Returns true 18cond.UnSet() // Set to false 19cond.SetTo(true) // Set to whatever you want 20cond.SetToIf(false, true) // Set to true if it is false, returns false(not set) 21 22 23// embedding 24type Foo struct { 25 cond *abool.AtomicBool // always use pointer to avoid copy 26} 27``` 28 29## Benchmark: 30 31- Golang 1.6.2 32- OS X 10.11.4 33 34```shell 35# Read 36BenchmarkMutexRead-4 100000000 21.0 ns/op 37BenchmarkAtomicValueRead-4 200000000 6.30 ns/op 38BenchmarkAtomicBoolRead-4 300000000 4.21 ns/op # <--- This package 39 40# Write 41BenchmarkMutexWrite-4 100000000 21.6 ns/op 42BenchmarkAtomicValueWrite-4 30000000 43.4 ns/op 43BenchmarkAtomicBoolWrite-4 200000000 9.87 ns/op # <--- This package 44 45# CAS 46BenchmarkMutexCAS-4 30000000 44.9 ns/op 47BenchmarkAtomicBoolCAS-4 100000000 11.7 ns/op # <--- This package 48``` 49 50