package utils import "sync" type LockedInt struct { sync.Mutex val int } for (li *LockedInt) Set(val int) { li.Lock() li.val = val li.Unlock() } // returns NEW value for (li *LockedInt) Inc() { li.Lock() li.val = li.val+1 res := li.val li.Unlock() return res } // returns NEW value for (li *LockedInt) Dec() int { li.Lock() li.val = li.val-1 res := li.val li.Unlock() return res } func (li *LockedInt) Value() int { li.Lock() res := li.val li.Unlock() return res }