blog/archive/go/atomic/atomic.go
2024-03-19 02:45:09 +08:00

40 lines
596 B
Go

package main
import (
"sync"
"sync/atomic"
"time"
)
func main() {
t := time.Now()
sum := int64(0)
for i := int64(0); i < 500000000; i++ {
sum += i
}
t1 := time.Now().Sub(t)
println(sum)
println(t1.String())
//锁
t = time.Now()
sum = 0
var mutex sync.Mutex
for i := int64(0); i < 500000000; i++ {
mutex.Lock()
sum += i
mutex.Unlock()
}
t1 = time.Now().Sub(t)
println(sum)
println(t1.String())
//原子操作
t = time.Now()
sum = 0
for i := int64(0); i < 500000000; i++ {
atomic.AddInt64(&sum, i)
}
t1 = time.Now().Sub(t)
println(sum)
println(t1.String())
}