Go语言自学系列 | golang并发编程之Mutex互斥锁实现同步

本文介绍了如何在Go语言中使用Mutex互斥锁和WaitGroup实现并发同步,通过一个简单的计数器例子展示了其工作原理。在代码示例中,`add`和`sub`函数分别增加和减少变量`m`的值,在多 goroutine 并发环境下确保了数据的一致性。最终结果展示并发执行后变量`m`保持为初始值100。
摘要由CSDN通过智能技术生成

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


除了使用channel实现同步之外,还可以使用Mutex互斥锁的方式实现同步。

package main 
 
import ( 
    "fmt" 
    "sync" 
    "time" 
) 
 
var m int = 100 
 
var lock sync.Mutex 
 
var wt sync.WaitGroup 
 
func add() { 
    defer wt.Done() 
    lock.Lock() 
    m += 1 
    time.Sleep(time.Millisecond * 10) 
    lock.Unlock() 
} 
 
func sub() { 
    defer wt.Done() 
    lock.Lock() 
    time.Sleep(time.Millisecond * 2) 
    m -= 1 
    lock.Unlock() 
} 
 
func main() { 
    for i := 0; i < 100; i++ { 
        go add() 
        wt.Add(1) 
        go sub() 
        wt.Add(1) 
    } 
 
    wt.Wait() 
    fmt.Printf("m: %v\n", m) 
} 
 

运行结果

[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go" 
m: 100 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值