200330.1 · a6a732e1fc2a0cb3cc31dc31c7c67f29ece2df9a
Update AtomicBool to use atomic memory operation (#1939)
reading declarations
Changes to src/util/atomicbool.go. All files
@@ -1,32 +1,34 @@ package util -import "sync"+import (+ "sync/atomic"+)++func convertBoolToInt32(b bool) int32 {+ if b {+ return 1+ }+ return 0+} // AtomicBool is a boxed-class that provides synchronized access to the // underlying boolean value type AtomicBool struct {- mutex sync.Mutex- state bool+ state int32 // "1" is true, "0" is false } // NewAtomicBool returns a new AtomicBool func NewAtomicBool(initialState bool) *AtomicBool {- return &AtomicBool{- mutex: sync.Mutex{},- state: initialState}+ return &AtomicBool{state: convertBoolToInt32(initialState)} } // Get returns the current boolean value synchronously func (a *AtomicBool) Get() bool {- a.mutex.Lock()- defer a.mutex.Unlock()- return a.state+ return atomic.LoadInt32(&a.state) == 1 } // 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+ atomic.StoreInt32(&a.state, convertBoolToInt32(newState))+ return newState }