范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Go开发atomic之比较并交换操作(CAS)

  有关CAS的文章,网络有很多详细说明,这里只做一个简洁的整理原理
  比较并交换称为CAS ,如图所示:
  如图所示,先从变量v中读取值,然后当修改时,就拿取的值再和内存中的值比一下。
  这个也容易理解,比如说,我想修改的值是以原来取的那个值为参照的,如果当前这两个值不一样了,肯定是被别人改了 。因此,我不得不重新读取一次,再来修改,以此循环。
  在这个故事中,还有一种情况,如果v被别人改了之后又再次改回来了还是v。那我方还以为v从来没变过,这就是ABA问题。修改上一篇的代码
  上篇讲了一个例子,两个协程分别将整数n循环加5000次,我们用比较并交换来修改下:var n int32 = 0  sig := make(chan int)  go func() { 	//看下尝试多少次 	nTry := 0 	for i := 0; i < 5000; i++ { 		for { 			old := n 			if atomic.CompareAndSwapInt32(&n, old, old+1) { 				break 			} else { 				nTry++ 			} 		} 	} 	fmt.Printf("nTry=%v ", nTry) 	sig <- 0 }()  go func() { 	//看下尝试多少次 	nTry := 0 	for i := 0; i < 5000; i++ { 		for { 			old := n 			if atomic.CompareAndSwapInt32(&n, old, old+1) { 				break 			} else { 				nTry++ 			} 		} 	} 	fmt.Printf("nTry=%v ", nTry) 	sig <- 0 }()  <-sig <-sig  fmt.Println(n)
  加一个for循环的原因是,可能一次没有成功,还需要重新尝试。
  用这种模式也可以解决同步的问题Go中的CAS源码
  实际代码文件在/src/runtime/internal/atomic/asm_amd64.s文件中TEXT runtime∕internal∕atomic·Cas64(SB), NOSPLIT, $0-25  MOVQ ptr+0(FP), BX  MOVQ old+8(FP), AX  MOVQ new+16(FP), CX   LOCK  // 比较BX和AX中的值,如果相等,将CX中的值给BX,即*addr=new  CMPXCHGQ CX, 0(BX)  // 设置返回值swapped,CMPXCHGQ比较如果相等,ret为1,否则为0  SETEQ ret+24(FP)   RET
  其中我们可以看作lock(一个命令前缀,在这里用于CMPXCHGQ) 可以锁住总线保证多次内存操作的原子性,然后执行CMPXCHGQ
  CMPXCHGQ CX, 0(BX)的解释 :如果AX(旧)与BX(原)相等,则CX(新)送BX且ZF置1;否则BX送给CX,且ZF清0
  因此,比较并交换是依赖硬件完成的CAS的优缺点
  优点:乐观锁,轻量
  缺点:解决不了ABACAS如果不成功则会发生自旋,但是自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。只能保证一个共享变量的原子操作

考上清华北大,意味着什么?谢谢邀请!感谢今日头条问答板块,就此问题,我谈谈自己粗浅看法,请各位网友不惜赐教。一考上清华北大对于整个家庭,甚至家族来说是很荣耀的一件事,意味着可以光宗耀祖,光耀门厅。一些乡下地初一学生一学期从优生直接跳到了差生什么原因?怎么办?我说的你们信不信?小学成绩太假。我不是说小学老师在学生成绩上造假,而是说小学生的高分背后暗藏危机,这个危机藏得很深,让老师家长孩子发现不了,最终孩子付出巨大代价还不知道是怎么一会事聘干身份提拔事业单位副科级以后还有晋升空间吗?废话不多说,明确告诉你聘干身份提拔事业单位副科级后,还有晋升空间。我部门就有一个副部长(副科级)是聘用干部,在人事调整中,晋升到了正科级。开发区(副厅级单位)建区的时候,他就来开发因暖气不热安了循环泵,被邻居投诉并强行让我拆除,我该怎么办?这事以前在我住的小区发生过,当时闹得挺厉害,只是最后的处理结果让人始料未及。我们住的小区是一个差不多快二十年的小区,硬件设备都很落后,环境也不好最愁人的就是到了冬天,无论怎么放水放在职考入某事业单位,职称聘任要从初级开始聘,合理吗?这种情况肯定是合理的,没有必要去和单位争执,争执太多对你没有什么好处。一般来说,专业技术岗的首次定级,要么按常规来操作,要么按招考公告来操作,要么按人才引进方式来进行。以下为我们市东莞月入两万什么水平?算是很乐观的收入了这么说吧如果你在一个城市每个收入能在所在的城市购买一平方房子也就是说比当地普通房价收入还高那么你算混得相当不错了只有其他的东西就见仁见智了我是东莞本地人,在寮步镇企业5000没人干,机关3000不辞职,企业用工荒怎么造成的?算算账就知道了。机关30001机关的3000是明面上的,是有据可查的,也是给别人看的。2各种补贴,各种福利,都是明面下的,是自己人看的。我一个朋友工资只有3200多,死都不肯离开,一级教师相当于行政岗什么级别?踏浪经过一番查阅,最后初步认定,在地市州盟(以下简称市地级)一级行政区划管辖权下,中学一级教师(中级专业技术职务相当于中小学管理岗位的正科级(公务员系列的乡科级)职务。首先我们先来在培训机构里做老师,有出息没?这个问题问出来就显得你很没出息,职业不分贵贱,行行出状元,培训机构里做老师同样是一个很好的职业选择,看看俞敏洪和他的那些教师大神们,哪个不是出类拔萃,你能说他们不是成功的老师典范吗兰州新区目前体量多大,有没有打工岗位,未来发展怎么样?朋友,您好。就你的问题我简要做个答复。本来在兰州新区生活6年,都是个人对兰州新区的认识,望采纳。1。兰州新区体量不知道你说的是哪些体量(1)人口户籍人口不到30万,28。8万多。实不读书的人当了老板,读书的人在打工,读书有什么用?不读书的人当了老板的是少数,而读书当老板当官的是多数,什么都没有绝对的相对多读书,比不读书少读书要好更有用,耍不读书干什么,那不成了读书无用了。答我尝到读书的甜头。1在知识越多越反
度小满诉讼负债人高达6114起,涉及金额高达3500多万元3月10日,网传度小满原百度金融于今年上半年正式向港交所递交招股书,拟主板挂牌上市。成为百度AI生态下又一家独立上市的公司,随后,度小满对包括中证网在内的多家媒体回应,有关上市传闻云视网评在追光逐链中为绿色低碳发展注入新鲜力量(云视网特约评论员李怀华)由云南省广播电视局指导,云南广播电视台拍摄制作完成的云南省广播电视和网络视听节目创新创优扶持项目系列短纪录片云南产业新动能,聚焦云南十二大产业中的典型行业期望太高的3个坏处原来它是一个人痛苦的根本原因公元前299年,楚怀王被秦国扣为了人质。此外,齐国也把太子横扣为了人质。一国没有国君,于是楚国上下出现了一片恐慌。后来太子横在代令尹昭睢的拥护下,返回了楚国,并且在公元前298年,嫪毐为何让赵姬如此痴迷?司马迁道出了其中的原因前言赵姬的一生太过精彩,出身望族,家道中落,狠狠的跌入尘土。如果没有意外的话,她这一辈子可能也就是被某个老爷收为妾室。她很幸运,遇上了吕不韦。吕不韦应该是她第一个男人,在史记中清楚浅析古代边防军事的演变与发展在阅读此文之前,麻烦您点击一下关注,既方便您进行讨论和分享,又能给您带来不一样的参与感,感谢您的支持。引言随着人类社会的发展和交往的日益增加,边防地区的军事防卫成为各国必须面对的重幼儿园关停或成趋势,专家首轮关停潮已至,什么原因造成的?幼儿园关停或成趋势,专家说,首轮关停潮已至。你们知道是什么原因造成的吗?幼儿园关停嘲,主要还是指私立幼儿园,毕竟私立幼儿园是自负盈亏的。幼儿园这个消息刚出来的时候,很多县城的人们可为什么婴儿总是哭?原来有这些原因头条创作挑战赛作为父母,你是否曾被婴儿的哭声搞得烦躁不安,不知道应该如何应对?其实,婴儿哭泣的原因并不单一,只有深入了解背后的原因,才能更好地应对哭泣的婴儿,使他们安静下来。一饥饿孕傻的原因是什么?真的会孕傻吗?我们常常听说一孕傻三年,这是真的吗?其实这句话说对了一半,这里的傻不是智商的下降,而是指记忆力下降。那么为什么会出现孕傻现象呢?一孕傻三年有科学依据吗?在医学期刊上有一篇文章说明了缺少独立玩耍是导致儿童心理健康下降主要原因发表在儿科学杂志一项新的研究表明,儿童和青少年精神健康障碍的增加归因于几十年来他们玩耍游戏和从事独立于成年人直接监督和控制的活动的机会减少。尽管本意是好的,但成年人引导和保护儿童的2。6亿部!三星错失我国市场仍是全球销冠,背后原因值得深思阅读此文之前,麻烦您点击下关注,方便与您讨论分享,也能及时观看下一篇精彩文章。非常感谢您的关注!一直以来我国都是众多品牌手机的重要市场,人口基数庞大,消费能力强。在国产手机体系不成幼儿园关停或成趋势,什么原因引起?2023取消民办幼儿园有可能吗随着我国出生率年年下降,最先受到冲击的就是幼儿园。因为正常情况下,小孩满三岁就会送幼儿园读书。但是这三年疫情,导致生育率已经大幅度下降,一些地区已经出现首轮幼儿园关停潮。这或许仅仅