@ 261102.1

200330.1 · a6a732e1fc2a0cb3cc31dc31c7c67f29ece2df9a

Update AtomicBool to use atomic memory operation (#1939)

reading declarations

Changes to src/util/atomicbool.go. All files

src/util/atomicbool.go

@@ -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 }