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

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带来非常大的执行开销。只能保证一个共享变量的原子操作

在广州交社保9年深圳交6年,总交15年,退休后去哪领工资?根据规定,在任何一个地方社保都没交够10年的,就回户籍所在地领退休金。在广州交社保9年深圳交6年,总交15年,退休后去哪领工资?这个问题,首先你两处社保都没有缴纳够满10年,一个广沈阳市人口833万现有住房人均是几套?我们办公室的目前据我所知只有一个农村小伙儿只有一套88平两居室的房子。其他人至少两套房子,其中一套三室的。沈阳的房价17之前挺便宜的,当然现在也不贵。大家没有好的投资理财手段,基本中国第一个得艾滋病的人是怎样患上艾滋病的?具体是哪年?我是萨沙,我来回答。中国第一个艾滋病人,是北京市一个营业员。不过,在中国发现的第一个艾滋病人,是个老外。1985年6月,一个叫做阿克斯的美国青年来华旅行期间,突然在北京发病,陷入垂建议打开与落后国家跨国婚姻之门,解决我国剩男问题,你支持吗?从来不存在这样一扇门。所以国家无从打开不打开。想要跨国婚姻,自己去找。或者通过婚介中介介绍。没有人会把外国的女人送到你面前。这种事,绝对不可能由国家出面。民间自己就能解决。据专家说城市繁华,农村宁静,来自农村的你有没有回农村的想法?回农村的想法,不是现在才有,一直都有。不过,要等到合适的时候才回去。正如你所说,城市繁华,生活节奏太快,各方面支出大,很多人会有压力感。而农村宁静,有田有地,可种花种草,种菜种果,洛阳修建地铁的意义在哪里?洛阳修建地铁可以说对洛阳市的城市建设和城市规划还是有非常大的好处的。首先,洛阳市目前拥有6个市辖区,目前市区人口拥有260万左右,可以说是一个大城市,市区规划面积达到了近600平方奔五和过五的70后,敢晒晒自己的现状和自己将来的打算吗?身体好是我唯一想的,不生病,好好的,哪也不疼不痒的,就好!将来老了,离孩子近一点就行!过好每一天,高高兴兴,平平安安!74年的,目前任职一份饿不死,饱不了的工作。儿子今年七月刚出来你身边有没有人饭量特别大,大到不亲眼见到就无法相信的那种?有一次相亲,媒人给我介绍了一个长的挺好看的女孩,那女孩1。7m的个头,长的挺瘦,估计不超过55kg。我和她约在一个商场见面,刚见她的时候,就觉得他长的还挺好看的。我俩聊了一会,感觉无锡中小学教师工资待遇怎么样?一个月有10000元吗?坐标江苏无锡滨湖区,现在是第六年入职的小学教师,现在每个月到手5062,公积金是4010左右,住房补贴是3008左右,第三年大涨完就开始慢慢涨了。绩效全年发了大概70000多点。公低保从交材料到现在一年四个月了还没下来!你们办低保用了多久?我认为你的低保没有被批准下来,不知道你在哪个城市?我们这边基层干部都会给你反馈信息的。申请低保民政局有明确规定,30个工作日内会有答复,当然也有特殊情况的时候,但是如果30个工作日山东户口在河南上学,没有高中学籍怎么办?我在郑州教育行业从业多年,对教育行业了如指掌,尤其是郑州小学,初中,高中家长普遍关心的学籍问题。学籍,严格来说就是学生的第二张身份证,只要有学校上一定会有学籍,尤其是9年义务教育阶
莫兰德归队遇阻,辽宁队做重大决定,杨鸣不等了,刘子庆提前出手北京时间2月16日,辽宁男篮正在备战CBA常规赛第三阶段比赛,球队目前缺少四名本土主力球员,韩德君正在养伤恢复之中,张镇麟赵继伟和郭艾伦正在中国男篮备战世预赛,预计月底27号才能够詹姆斯2166创纪录,浓眉2810暴走,湖人大胜鹈鹕!拉塞尔217北京时间2月16日,NBA常规赛继续进行。洛杉矶湖人队坐镇主场,挑战新奥尔良鹈鹕队。该场比赛,锡安威廉森小南斯因伤缺战,詹姆斯CJ麦科勒姆实现了伤愈复出。此役,英格拉姆与安东尼戴维詹姆斯复出!湖人复仇鹈鹕拒绝连败,浓眉哥2810,拉塞尔217北京时间2月16日,NBA常规赛继续进行,湖人主场120102轻取鹈鹕,报了11天之前输给对手的一箭之仇。此役詹姆斯复出,新三巨头詹姆斯浓眉哥和拉塞尔表现都很出色,湖人从未落后过1NBA3大阵容动态!乐福与骑士敲定买断,罗斯加盟太阳,威少或失业头条创作挑战赛犹他全明星即将打响,NBA交易市场过后的余波仍在,过去24小时内,联盟又传出了3大阵容动态。TA名记查拉尼亚与劳埃德联合报道,骑士正在与老将乐福敲定合同买断,如果双方谁最有可能成为中国奥运史上第一个六金王中国运动健儿在奥运会上一共诞生了四位五金王,那么谁最有可能成为第一个六金王,谁又很遗憾和六金王失之交臂呢?我们来盘点一下奥运会历史上的金牌数量的突破中国第一个一金王是许海峰(198官宣!太阳签下三分射手,四巨头再获帮手,15人冲冠豪阵出炉北京时间2月16日,NBA常规赛继续展开,自由市场又传来消息,其中太阳官方宣布,正式签下三分射手特伦斯罗斯。在交易得到杜兰特之后,太阳也是在提升阵容深度,将目光放在买断市场,成功签第三阶段,同曦主场战江苏,西热力江志在复仇,史琳杰或场边督战悄然间,距离联赛第三阶段拉开帷幕,仅剩下不到半个月的时间。目前,各支球队的备战工作,仍在井然有序的进行着。前不久,同曦男篮与中国男篮集训队进行了一场内部教学赛。最终,男篮集训队大胜盘点英超历史上十大职业生涯出现断崖式下降的球员不少英超球员在职业生涯的某个时刻状态会出现离奇的断崖式下滑,对于这些球员家来说,有时候甚至很难说出哪里出了问题。当然,这里头的原因是多方面的,有些球员可能会在某些时候状态就出现了自50匹马集结桐庐,今年5月又可以去桐庐看马术表演了钱江晚报小时新闻记者张峰记者从杭州亚组委获悉,韵味杭州2023首届中国杭州(桐庐)国际马术公开赛将于2023年5月13日至18日在杭州桐庐马术中心举办,比赛项目为场地障碍赛和三项赛象棋大师黄少龙论棋道第十四章国赛考验十四国赛考验1974年7月,全国象棋个人赛在成都举行,因1966年文化大革命期间停止棋赛,相隔8年才恢复,棋人兴奋异常,百余名棋手欢聚一堂,分10个小组预赛,每组前3名进入甲组决赛2022美网男单决赛赛后评析去年此时,CarlosAlcaraz才刚在美网一鸣惊人,击败了StefanosTsitsipas并一举打进生涯首次大满贯八强。如今,他接连击退了各路强敌,拿下今年的美国网球公开赛冠