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

南京网站开发荐南京乐识网页版qq聊天登录入口

南京网站开发荐南京乐识,网页版qq聊天登录入口,做平台网站一般有php还是js,设计工作室装修效果图Go基础之锁的初识 当我们的程序就一个线程的时候是不需要用到锁的#xff0c;但是通常我们实际的代码不会是单个线程的#xff0c;所有这个时候就需要用到锁了#xff0c;那么关于锁的使用场景主要涉及到哪些呢#xff1f; 当我们多个线程在读相同的数据的时候则是需要加锁…Go基础之锁的初识 当我们的程序就一个线程的时候是不需要用到锁的但是通常我们实际的代码不会是单个线程的所有这个时候就需要用到锁了那么关于锁的使用场景主要涉及到哪些呢 当我们多个线程在读相同的数据的时候则是需要加锁的当我们的程序既有读又有写的时候更是需要加锁的当我们有多个线程在写的时候同样也是需要加锁互斥锁 互斥锁同一个时刻只有一个线程能够拿到锁 我们先通过一个例子来演示如果当多个线程同时更改一个变量结果会是怎么样不加锁版本 package mainimport (syncfmt )var (//lock sync.Mutexcount intw sync.WaitGroup //用于等待子线程执行完之后退出 )func main() {w.Add(1) // 在调用线程前执行w.addgo func(){for i:0;i100000;i{count}w.Done() //执行完 执行w.Done}()for i :0;i100000;i{count}w.Wait() // 最后执行w.wait等待所有的线程执行完毕fmt.Println(count)} 当我们运行多次就可以发现最后的结果基本不可能是我们先看到的200000我们修改代码代码需要加锁保护的地方加上锁并且这里加的是互斥锁修改后的代码为 package mainimport (syncfmt )var (lock sync.Mutexcount intw sync.WaitGroup //用于等待子线程执行完之后退出 )func main() {w.Add(1) // 在调用线程前执行w.addgo func(){for i:0;i100000;i{lock.Lock()countlock.Unlock()}w.Done() //执行完 执行w.Done}()for i :0;i100000;i{lock.Lock()countlock.Unlock()}w.Wait() // 最后执行w.wait等待所有的线程执行完毕fmt.Println(count)} 这次当我们多次运行的时候就能保证我们每次都能看到我们想要的值200000接下来看读写锁 读写锁 读写锁主要用到读多写少的场景读写锁分为读锁和写锁 如果自己设置了一个写锁那么其他读的线程以及写的线程都拿不到锁这个时候和互斥锁的功能相同如果自己设置了一个读锁那么其他写的线程是拿不到锁的但是其他读的线程都是可以拿到这个锁 我们把上面的例子代码进行更改 package mainimport (syncfmt ) var (rwlock sync.RWMutexw sync.WaitGroupcount int )func main() {w.Add(1)go func(){for i:0;i1000000;i{rwlock.Lock() // 这里定义了一个写锁countrwlock.Unlock()}w.Done()}()for i:0;i1000000;i{rwlock.Lock() // 这里定义了一个写锁countrwlock.Unlock()}w.Wait()fmt.Println(count) } 通过设置写锁我们同样可以实现数据的一致性下面是一个读锁的使用例子 package mainimport (syncfmt )var (rwlock sync.RWMutexw sync.WaitGroupcount int )func main() {w.Add(1)go func(){for i:0;i1000000;i{rwlock.Lock() // 这里定义了一个写锁countrwlock.Unlock()}w.Done()}()for i:0;i16;i{w.Add(1)go func(){rwlock.RLock() //这里定义了一个读锁fmt.Println(count)rwlock.RUnlock() //释放读锁w.Done()}()}w.Wait()fmt.Println(count) } Go中的原子操作 原子操作我们则不需加锁也能保证数据的一致性并且如果只是计算那么原子操作则是最快的 实例代码 package mainimport (sync//timesync/atomicfmt )var (w sync.WaitGroupcount int32 )func main() {w.Add(1)//start : time.Now().UnixNano()go func() {for i:0;i1000000;i{atomic.AddInt32(count,1)}w.Done()}()for i:0;i1000000;i{atomic.AddInt32(count,1)}w.Wait()//end : time.Now().UnixNano()//fmt.Println((end- start)/1000/1000)fmt.Println(count) }   所有的努力都值得期许每一份梦想都应该灌溉 转载于:https://www.cnblogs.com/flying1819/articles/8832749.html
http://www.sadfv.cn/news/330080/

相关文章:

  • 中国做的手机系统下载网站wordpress 获取用户名
  • 二级网站建设 管理思路上海大型广告公司排名
  • 网站头部特效seo点击工具
  • 企业网站建设 英铭美妆网站建设规划
  • 会员卡怎么制作网站seo 工具
  • 长春建站企业腾讯域名怎么建设网站
  • 双语 网站 数据怎么做推荐wordpress主题xiu
  • 用jsp做的网站有哪些导视设计案例分析
  • linuxvps建站教程国内flash网站
  • pinterest网站怎么进网页设计制作报告
  • excel表格做网站做炒作的网站
  • 成立一个网站软件需要多少钱全自动网站制作源码
  • 做一个网站需要什么条件商城网站建设是什么意思
  • 如何进行网站性能优化?苏州网站制作搭建
  • 锤子手机网站模板商务网站开发与建设
  • 做网站用的什么编程语言网站的常用技术有哪些
  • 南宁网站建设优化排名柘城网站建设
  • 做做做网站wordpress二维码
  • 品牌网站建设帮你大蝌蚪网站建设网站排名
  • 网站 代理 备案 费用admin管理员登录
  • 网站八个安康市教育云平台
  • 大良营销网站建设服务广州广告网站建设
  • 阿里巴巴网站威海哪里做?深圳商业策划公司十大公司
  • 做网站的电脑软件上海资格证报名网站
  • 简单网站门户网站开发设计报告
  • 没有服务器建网站官网是什么意思
  • 个人网站开发模式windows10前段网站建设
  • 服务器放n个网站公职人员可以做公益网站吗
  • 抚州南城网站建设上海市城乡住房建设厅网站
  • 做环保的网站有哪些网站上传都传些什么文件