51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
// bulma/atomic_counter.go
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
var atomicCounter atomic.Int64 // 原子计数器(新类型)
|
|
var muCounter int64 // Mutex保护的计数器
|
|
var mu sync.Mutex // 互斥锁
|
|
|
|
// 原子操作计数
|
|
start := time.Now()
|
|
var wg sync.WaitGroup
|
|
for i := 0; i < 1000; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
for j := 0; j < 1000; j++ {
|
|
atomicCounter.Add(1)
|
|
}
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
atomicTime := time.Since(start)
|
|
|
|
// Mutex 计数(对比)
|
|
start = time.Now()
|
|
for i := 0; i < 1000; i++ {
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
for j := 0; j < 1000; j++ {
|
|
mu.Lock()
|
|
muCounter++
|
|
mu.Unlock()
|
|
}
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
mutexTime := time.Since(start)
|
|
|
|
fmt.Printf("✅ 原子计数: %d (耗时: %v)\n", atomicCounter.Load(), atomicTime)
|
|
fmt.Printf("✅ Mutex计数: %d (耗时: %v)\n", muCounter, mutexTime)
|
|
fmt.Printf("🚀 性能提升: %.1fx\n", float64(mutexTime)/float64(atomicTime))
|
|
}
|