7、Go语言并发编程:同步与上下文管理

Go语言并发编程:同步与上下文管理

1. 并发执行的随机性

在Go语言中,并发执行的程序会呈现出随机性。例如,运行某些并发程序时,打印的数字顺序是随机的。这是因为在并发环境下,无法确定一个调度好的函数何时会执行。在任意时刻,可能有0到10个goroutine在执行 fmt.Println(x) ,还有一个在执行 fmt.Println("hello") ,而且 main() 函数本身也是一个goroutine。当 for 循环结束后, fmt.Println("hello") 会执行,但它可能在所有数字之前、中间或者之后被打印出来,就像赛道上的马一样,虽然知道所有马都会到达终点,但不知道哪一匹会最先到达。

2. 同步规则与方法

在进行并发编程时,有一个简单的规则:可以在不同步的情况下并发读取变量,但单个写入者需要同步。Go语言中常见的同步方法有:
- 通道(Channel) :用于在goroutine之间交换数据。
- 互斥锁(Mutex)和读写锁(RWMutex) :来自 sync 包,用于锁定数据访问。
- 等待组(WaitGroup) :来自 sync 包,用于跟踪访问。

这些方法可以防止多个goroutine同时读写变量。如果尝试从多个goroutine同时读写同一个变量,结果是未定义的,这被称为数据

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值