package main
import (
"fmt"
"time"
)
type atomicInt int
func (a *atomicInt) increment() {
*a++
}
func (a * atomicInt) get() int {
return int(*a)
}
func main() {
var a atomicInt
a.increment()
go func() {
a.increment()
}()
time.Sleep(time.Millisecond)
fmt.Println(a)
}
go run -race atomic.go
代码:https://github.com/NIGHTFIGHTING/go_learning/blob/master/src/channel/atomic/atomic.go
package main
import (
"fmt"
"time"
"sync"
)
type atomicInt struct {
value int
lock sync.Mutex
}
func (a *atomicInt) increment() {
fmt.Println("safe increment")
func() {
a.lock.Lock()
defer a.lock.Unlock()
a.value++
}()
}
func (a * atomicInt) get() int {
a.lock.Lock()
defer a.lock.Unlock()
return a.value
}
func main() {
var a atomicInt
a.increment()
go func() {
a.increment()
}()
time.Sleep(time.Millisecond)
fmt.Println(a.get())
}