Golang异步编程,快速理解Goroutines通信、各种锁的使用
package main
import (
"fmt"
"sync"
"sync/atomic"
"time"
)
func main() {
var (
wg sync.WaitGroup
counter int32
)
// 启动两个并发的goroutine
for i := 0; i < 2; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for count := 0; count < 2; count++ {
// 原子操作增加counter的值
atomic.AddInt32(&counter, 1)
time.Sleep(time.Millisecond * 100)
}
}()
}
wg.Wait() // 等待所有goroutine完成
// 输出counter的最终值,应该为4
fmt.Println("Counter value:", counter)
}
这段代码使用了sync
和sync/atomic
包来处理并发和同步。主函数中,我们启动了两个goroutine,每个goroutine将counter的值原子性地增加了2次。使用sync.WaitGroup
确保主函数在所有goroutine完成之前不会退出。最后,输出counter的最终值来验证是否两个goroutine中的操作是否确实同步和原子执行。
评论已关闭