当前位置: 首页 > news >正文

广州开发区建设局网站黄埔企业logo标志设计免费

广州开发区建设局网站黄埔,企业logo标志设计免费,东莞网站建设总部地址,博客网站入口文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写#xff0c;如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读… 文章目录背景RWMutex 简介代码验证多个协程请求读锁 RLock() 和 RLock()读写交错 RLock() 和 Lock()写入的时候读取读取的时候写入请求多个写Lock() 和 Lock()背景 Mutex 互斥锁是严格锁定读和写如果我们需要单独对读或者写添加锁需要使用 sync包的RWMutex 针对读多写少的情况 读写锁的原则是 1、可以随便读多个协程同时读。 2、写的时候不能读也不能写。 RWMutex 简介 RWMutex 类型一共有 6 个方法 RLock/RUnlockRLock 锁定读操作如果锁已被写操作持有RLock 方法会被阻塞直到锁释放如果锁已被读操作持有则无限制可以读取内容。RUnlock 是读操作对应的释放锁的方法。 Lock/UnlockLock 锁定读写操作不管是读操作持有锁还是写操作持有锁Lock 方法都会被阻塞直到锁释放。Unlock 是对应的释放锁方法。一般用于写操作的场景。 rUnlockSlow检查读操作是否全部释放锁如果读锁全部释放才可以唤醒写操作去请求写锁。 RLockerRLocker 为读操作返回一个 Locker 接口它的 Lock 方法会调用 RWMutex 类型的 RLock方法它的 Unlock 方法会调用 RWMutex 类型的 RUnlock方法。 其中 RLock() 和 RLock() 之间并不互斥可以共享锁Lock() 和 Lock() 之间还有 RLock() 和 Lock() 之间是互斥的. 代码验证 多个协程请求读锁 RLock() 和 RLock() package mainimport (fmttimesync )// 声明Mutex变量 var mu *sync.RWMutex var count 0 func main() {mu new(sync.RWMutex)for i: 0; i 1000; i {go readLock(i)}time.Sleep(2*time.Second) }func readLock(i int) {mu.RLock()countfmt.Println(i, Read Lock is, count)mu.RUnlock() }如上代码所示 我们启动1000个协程每个协程执行的readLock 中都添加了 RLock(). 执行结果如下 结果发现count 数字打印杂乱无章说明这些协程同时持有锁多个RLock() 之间并不互斥。 读写交错 RLock() 和 Lock() 写入的时候读取 package mainimport (fmttimesync )// 声明Mutex变量 var mu *sync.RWMutex var count 0 func main() {mu new(sync.RWMutex)for i : 0; i 5; i {go readLock(1)}for i : 0; i 5; i {go writLock(1)}time.Sleep(30*time.Second) }func writLock(i int){mu.Lock()fmt.Println(i, Writ Lock start, count)countfmt.Println(i, Writ Lock is, count)time.Sleep(1 *time.Second)fmt.Println(i, Writ Lock done, count)mu.Unlock() }func readLock(i int) {mu.RLock()fmt.Println(i, Read Lock is, count)// time.Sleep(10 *time.Second)fmt.Println(i, Read Lock done)mu.RUnlock() } Lock() 写入的时候sleep 期间 使用 RLock() 读取 结果如下 发现在 write 等待的时候 read 并没有获得锁 说明 Lock() 锁未释放 RLock() 不能获得锁 读取的时候写入 package mainimport (fmttimesync )// 声明Mutex变量 var mu *sync.RWMutex var count 0 func main() {mu new(sync.RWMutex)for i : 0; i 10; i {go readLock(1)}for i : 0; i 10; i {go writLock(1)}time.Sleep(15*time.Second) }func writLock(i int){mu.Lock()fmt.Println(i, Writ Lock start, count)countfmt.Println(i, Writ Lock is, count)// time.Sleep(1 *time.Second)fmt.Println(i, Writ Lock done, count)mu.Unlock() }func readLock(i int) {mu.RLock()fmt.Println(i, Read Lock is, count)time.Sleep(10 *time.Second)fmt.Println(i, Read Lock done)mu.RUnlock() }在 RLock() sleep 期间 使用 Lock() 结果如下 read 期间 writ 并没有获得锁。 证明了 RLock() 和 Lock() 是互斥的。 请求多个写Lock() 和 Lock() package mainimport (fmttimesync )// 声明Mutex变量 var mu *sync.RWMutex var count 0 func main() {mu new(sync.RWMutex)for i: 0; i 1000; i {go writLock(i)}time.Sleep(2*time.Second) }func writLock(i int){mu.Lock()countfmt.Println(i, Writ Lock is, count)mu.Unlock() }启动1000个线程 使用 Lock() 执行 count , 结果如下 发现最红结果是1000并且是按照顺序进行计算的。 说明多个协程之间的Lock() 是互斥的。
http://www.hkea.cn/news/14379624/

相关文章:

  • 官网网站怎么创建扬中网站推广导流
  • 网站付费推广刚做的网站上线后收不到了
  • 深圳外文网站制作备案期间网站关闭
  • 网站开发前端指什么开封市建设中专网站
  • 阿里巴巴官方网站开发手机网站
  • 不配置iis做网站百度统计官网
  • 医院手机网站建设经营一个小型app多少钱
  • 可以用tomcat.做网站吗做微信首图的网站
  • thinkphp网站源码下载2023最新15件重大新闻
  • 做内销的网站推荐网站建设是不是要有营业执照
  • 建材 东莞网站建设网店推广的常用方法有哪些
  • 自考大型网站开发工具做培训的网站
  • 成都微信网站建设报价单彩票网站建设成本
  • seo渠道台州seo管理
  • 农家乐网站 建设网络营销优化外包
  • 网站能实现什么功能中国国家住房和城乡建设部网站首页
  • 企业申请完域名以后 怎么把网站运行起来怎样做视频电影网站
  • 微信小程序网站建设哪家好如何免费制作微信小程序
  • 甘肃建设银行网站网站建设 职责
  • 企业网站 建设过程工商注册信息查询系统
  • 做网站策划需要用什么软件phpwind转WordPress
  • 大丰专业做网站如何做国外的电商网站
  • 做微博网站好不好网站展示型推广
  • 河北省住房和城乡建设厅网站查网站需求文档
  • 女与男做那个的视频网站小程序怎么进入公众号
  • 丽水网站seo做网站互联网公司排名
  • 网站建设seo优化浙江idc数据中心
  • 泰安红河网站建设重庆网站备案需要几天
  • 云主机怎么上传网站手机网站开发 教程
  • 威海屋顶防水价格威海做防水网站长沙装修公司排名榜