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

房地产开发建设网站网站建设合同下载

房地产开发建设网站,网站建设合同下载,祥云平台建站,个人网站icp备案教程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.zqtcl.cn/news/716721/

相关文章:

  • 企业手机网站设计案例做网赌网站怎么推广
  • 2018外贸网站排名购物网站网页设计
  • 赣州培训学做网站软装设计理念
  • 银川建设网站公司wordpress 小工具添加图片
  • 做任务领黄钻的网站怎样建免费个人网站
  • 网站怎么做留言提交功能网站制作公司司
  • 大连购物网站开发wordpress怎么用ftp上传插件
  • 做微商怎样加入网站卖东西赚钱做代理的项目在哪个网站
  • 企业电子商务网站平台建设奉贤做网站公司
  • 非凡网站建设 新三板代运营套餐价格表
  • 湖南建立网站营销设计网站建设的创新之处
  • 手机站是什么意思免费建论坛
  • 网站开发学习路线专用车网站建设哪家好
  • 贵阳网站建设端觉wordpress gif 点击播放
  • 苏州产品推广公司厦门关键词seo
  • 建设内网网站流程凡客诚品现在还有吗
  • 西安网站公司免费云手机无限时间版
  • 网站建设与管理案例教程ipad可以做网站吗
  • 济南网站建设模板python网站开发用什么软件
  • 北京品牌网站建设阿里巴巴logo图片
  • 做宣传册从哪个网站找素材中文在线っと好きだっ
  • 国际物流东莞网站建设wap是什么意思的缩写
  • 传奇官网百度seo营销网站
  • 如何在导航网站上做链接上海建筑设计研究院
  • 微信营销软件网站建设推广链接
  • 美的集团网站建设方案书广汉做网站
  • 个人博客网站实验报告商标购买网站
  • 2020给个免费网站好人有好报做购物微信网站
  • 做淘宝客网站挣钱济南百度竞价代运营
  • 国外网站404错误页网站地址搜索