go语言怎么加锁解锁

 时间:2024-10-11 19:29:02

1、sync.Mutex互斥锁这种互斥很实用,而且被sync包里的Mutex类型直接支持。它的Lock方法能够获取到token(这 里叫锁),并且Unlock方法会释放这个token:直接看代码(下图)

go语言怎么加锁解锁

2、每次一个goroutine访问bank变量时(这里只有balance余额变量),它都会调用mutex的Lock方 法来获取一个互斥锁。如果其它的goroutine已经获得了这个锁的话,这个操作会被阻塞直到其它goroutine调用了Unlock使该锁变回可用状态。mutex会保护共享变量。惯例来说,被 mutex所保护的变量是在mutex变量声明之后立刻声明的。在Lock和Unlock之间的代码段中的内容goroutine可以随便读取或者修改,这个代码段叫做临 界区。goroutine在结束后释放锁是必要的,无论以哪条路径通过函数都需要释放,即使是在错误路径中,也要记得释放。

3、Balance函数只需要读取变量的状态,所以我们同时让多个Balance调用并发运行事实上是安全的,只要在运行的时候没有存款或者取款操作就行。在这种场景下我们需要一种特殊 类型的锁,其允许多个只读操作并行执行,但写操作会完全互斥。这种锁叫作“多读单写”锁 (multiple readers, single writer lock),Go语言提供的这样的锁是sync.RWMutex

go语言怎么加锁解锁

4、Balance函数现在调用了RLock和RUnlock方法来获取和释放一个读取或者共享锁。Deposit函 数没有变化,会调用mu.Lock和mu.Unlock方法来获取和释放一个写或互斥锁。

  • 戴尔电池管理软件怎么下载
  • win10桌面图标不见的解决方法
  • 实测一分二音频线的音效问题
  • 固态测试数据差别太大怎么处理
  • QQ飞车手游A车极音战歌改装分支
  • 热门搜索
    维生素a的作用 十二卷的养殖方法 爬是什么结构 recommend什么意思 clerk是什么意思 非转基因是什么意思 酸辣白菜的腌制方法 我想要怒放的生命是什么歌 黑色婚纱代表什么 白醋洗脸有什么好处