Go语言包中的 sync 包提供了两种锁类型:sync.Mutex 和 sync.RWMutex。 (推荐学习:go)

Mutex 是最简单的一种锁类型,同时也比较暴力,当一个 goroutine 获得了 Mutex 后,其他 goroutine 就只能乖乖等到这个 goroutine 释放该 Mutex。

RWMutex 相对友好些,是经典的单写多读模型。在读锁占用的情况下,会阻止写,但不阻止读,也就是多个 goroutine 可同时获取读锁(调用 RLock() 方法;

而写锁(调用 Lock() 方法)会阻止任何其他 goroutine(无论读和写)进来,整个锁相当于由该 goroutine 独占。从 RWMutex 的实现看,RWMutex 类型其实组合了 Mutex:

type RWMutex struct {    w Mutex    writerSem uint32    readerSem uint32    readerCount int32    readerWait int32}

sync.mutex 加锁后禁止其他地方读或写,这个适用于可能出现的在不同go协程中修改同一个数据

sync.rwmutex 的lock 和 unlock 的使用和sync.mutex类似

sync.rwmutex 的rlock和runlock的使用适用于要读取数据,防止在读取的同时可能出现的别的地方写入,而导致的读取失败

更多相关文章

  1. golang 如何类型转换
  2. go语言数据类型转换教程
  3. golang判断是否目录的方法
  4. go语言中函数与方法介绍
  5. golang怎么把字符串转成Int类型
  6. Go语言中处理json数据的方法
  7. golang错误抛出的方法
  8. Go语言异常处理的方法介绍
  9. golang使用protobuf的方法详解

随机推荐

  1. android里发送mail的几种方式
  2. Linux 下Android 开发环境搭建
  3. (转载自diycode)2017 Android 面试题分享
  4. Maven开发Android指南 2 配置android-mav
  5. 安装|卸载apk文件在Android仿真器中
  6. android 画虚线、实线,画圆角矩形,一半圆角
  7. Android 侧滑菜单的实现
  8. Android NFC架构分析
  9. android EditText设置文字选中
  10. Android 获取状态栏的高度