GO语言使用共享变量实现并发

本文探讨了GO语言中并发编程的关键概念,包括竞态条件、互斥锁sync.Mutex及其Unlock方法,以及读写互斥锁sync.RWMutex的应用。通过使用锁,可以确保在多goroutine环境下正确地访问共享变量,防止数据竞争。
摘要由CSDN通过智能技术生成

1.1 竞态

    在串行程序中(即程序中只有一个goroutine),程序中各个步骤的执行顺序由程序逻辑来决定。
    竞态是指在多个 goroutine 按照某些交错顺序执行时程序无法给出正确的结果。竞态对于程序是致命的,因为它们可能潜伏在程序中,出现频率很低,不易重现。

1.2 互斥锁:sync.Mutex

    其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再次对其进行加锁,(如果再次加锁,就会造成死锁问题)。直到利用Unlock()解锁对其解锁后,才能再次加锁.适用于读写不确定场景,即读写次数没有明显的区别,并且只允许只有一个读或者写的场景,所以该锁叶叫做全局锁。

Unlock()用于解锁m,如果在使用Unlock()前未加锁,就会引起一个运行错误.已经锁定的Mutex并不与特定的goroutine相关联,这样可以利用一个goroutine对其加锁,再利用其他goroutine对其解锁。

import "sync"

var(
    mu sync.Mtuex
    balance int
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值