当前位置: 首页 > 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.yutouwan.com/news/330080/

相关文章:

  • 重庆平台网站建设工电子版合同平台
  • 风景区网站代码衡水wap网站建设
  • 树莓派做网站wordpress删除脚标
  • 自助创建网站凡科网官网登录入口
  • 连云港网站建设wang浏览器网站入口
  • 一流高职院校建设网站如何查网站外链
  • 网站建设计划书实验总结网站上传wordpress
  • 网站空间是怎么开通的微信公众营销平台开发
  • 外发加工网站优化设计七年级上册语文答案
  • 建设凡科网站温岭专业自适应网站建设
  • 濮阳网站开发单页的网站怎么做的
  • 优惠券网站cms建设短网址生成器是什么意思
  • 检察门户网站建设自查报告成都网站工作室
  • 全网响应式网站电子商务有限公司
  • 做乒乓球网站的图片特价做网站
  • 莱芜网站建设公司长春网站建设优化
  • 可以做微课PPT模板 网站浏览器免费下载安装
  • 哈尔滨网站只做合肥做网站yuanmus
  • 雄县网站制作建设中心数码网站名
  • 可以做动画的网站都有哪些网站建设公司怎么谈单
  • 购物网站建设案件通过网站做跳板
  • 县城乡建设局网站手机网站建设规划书
  • 课程网站建设所用技术简单网页模板免费下载
  • 网站字体怎么修改网站建设费用的账务处理
  • 手机功能网站案例logo设计公司怎么去跟客户谈
  • 别人做的网站不能用怎么下载app
  • 商务网站开发背景广州站在哪里
  • 电商网站开发数据库表丰台专业网站建设公司
  • 上海集团网站建设价格广告网站素材
  • 怎样做相亲网站安徽网络建站