mirror of https://github.com/tidwall/tile38.git
safe atomic ints for rpi3, #269
This commit is contained in:
parent
82197faea0
commit
dc30f35646
|
@ -6,28 +6,31 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type aint struct{ v int64 }
|
type aint struct{ v uintptr }
|
||||||
|
|
||||||
func (a *aint) add(d int) int {
|
func (a *aint) add(d int) int {
|
||||||
return int(atomic.AddInt64(&a.v, int64(d)))
|
if d < 0 {
|
||||||
|
return int(atomic.AddUintptr(&a.v, ^uintptr(d-1)))
|
||||||
|
}
|
||||||
|
return int(atomic.AddUintptr(&a.v, uintptr(d)))
|
||||||
}
|
}
|
||||||
func (a *aint) get() int {
|
func (a *aint) get() int {
|
||||||
return int(atomic.LoadInt64(&a.v))
|
return int(atomic.LoadUintptr(&a.v))
|
||||||
}
|
}
|
||||||
func (a *aint) set(i int) int {
|
func (a *aint) set(i int) int {
|
||||||
return int(atomic.SwapInt64(&a.v, int64(i)))
|
return int(atomic.SwapUintptr(&a.v, uintptr(i)))
|
||||||
}
|
}
|
||||||
|
|
||||||
type abool struct{ v int64 }
|
type abool struct{ v uint32 }
|
||||||
|
|
||||||
func (a *abool) on() bool {
|
func (a *abool) on() bool {
|
||||||
return atomic.LoadInt64(&a.v) != 0
|
return atomic.LoadUint32(&a.v) != 0
|
||||||
}
|
}
|
||||||
func (a *abool) set(t bool) bool {
|
func (a *abool) set(t bool) bool {
|
||||||
if t {
|
if t {
|
||||||
return atomic.SwapInt64(&a.v, 1) != 0
|
return atomic.SwapUint32(&a.v, 1) != 0
|
||||||
}
|
}
|
||||||
return atomic.SwapInt64(&a.v, 0) != 0
|
return atomic.SwapUint32(&a.v, 0) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
type astring struct {
|
type astring struct {
|
||||||
|
|
Loading…
Reference in New Issue