summaryrefslogtreecommitdiffstats
path: root/src/util/atomicbool.go
blob: 9e1bdc8fd0393529e1111aae07b3a6fe8257c0a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package util

import "sync"

// AtomicBool is a boxed-class that provides synchronized access to the
// underlying boolean value
type AtomicBool struct {
	mutex sync.Mutex
	state bool
}

// NewAtomicBool returns a new AtomicBool
func NewAtomicBool(initialState bool) *AtomicBool {
	return &AtomicBool{
		mutex: sync.Mutex{},
		state: initialState}
}

// Get returns the current boolean value synchronously
func (a *AtomicBool) Get() bool {
	a.mutex.Lock()
	defer a.mutex.Unlock()
	return a.state
}

// Set updates the boolean value synchronously
func (a *AtomicBool) Set(newState bool) bool {
	a.mutex.Lock()
	defer a.mutex.Unlock()
	a.state = newState
	return a.state
}