游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go开发atomic之Add(修改操作)

  为什么会出现原子操作?
  有很多代码并不是一条指令能完成的,比如下面一段用C写的代码,反汇编如下:inta10;a;对a的汇编解释9:a;0040102Fmoveax,dwordptr〔ebp4〕00401032addeax,100401035movdwordptr〔ebp4〕,eax
  可以看到,a表面只有一句代码,但实际需要三条指令,这有什么问题吗?
  假如甲先拿到a10,然后执行,结果半路上被CPU调度暂停了(三条指令中的某个地方),而乙也去拿数据a10,它没有停,一下就将a自增到11,并写回到内存。
  等到甲被唤醒之后继续操作,但它不知道其实a已经被改了,然后将结果11又写到内存中。
  然而,我们期望的是加两次等于12,而最终的结果却是11,与期望相差很大。
  因此,这个问题在于:若干个人(线程)一窝蜂的对一个共享变量进行无约束的操作,中间肯定会出现错加的情况,如下图所示:
  go语言模拟如下varnint320sig:make(chanint)gofunc(){fori:0;i5000;i{n}sig0}()gofunc(){fori:0;i5000;i{n}sig0}()sigsigfmt。Println(n)
  分析:两个协程各加5000次,期望结果是10000,但在大多数情况下结果都不正确。
  为了避免这种情形发生,一个容易想到的做法就是独占操作,独占并不强调顺序,而是指当某个人操作的时候,其它任何人都不能读写,什么都不能做,只能等待。
  syncatomic包就提供了这些独占操作的函数,称为原子操作类函数。修改操作
  分为下面几类funcAddInt32(addrint32,deltaint32)(newint32)funcAddUint32(addruint32,deltauint32)(newuint32)funcAddInt64(addrint64,deltaint64)(newint64)funcAddUint64(addruint64,deltauint64)(newuint64)funcAddUintptr(addruintptr,deltauintptr)(newuintptr)
  由于大同小异,我们只说明AddInt32和AddUint32。funcAddInt32(addrint32,deltaint32)(newint32)
  其中第一个参数是地址,因为是对原址的修改,不赘述。第二个参数是delta,也就是差值。varnint320加2atomic。AddInt32(n,2)fmt。Println(n)2减1atomic。AddInt32(n,1)fmt。Println(n)1
  对于AddUint32函数,第二个参数delta是无符号数,因此不能传负数,一个迂回的方法是设置为:uint32(c1),其中c是负数的绝对值。
  推理如下
  负数在内存中是补码表示的,比如:C代码unsignedinta2;unsignedintba1;unsignedintba0xffffffff;
  a1等价于a0xFFFFFFFF,因为1的补码就是0xFFFFFFFF。
  补码的顺口溜是:绝对值按位取反再加1。如果换成另一种说法:绝对值减1再取反,两者是完全等价的,这就是uint32(c1)的由来。它是补码计算的第二种表示。计算a2varauint3210atomic。AddUint32(a,uint32(21))fmt。Println(a)打印8总结
  这篇介绍了为什么出现原子操作和其中之一的修改操作,下篇继续研究

乾隆七世孙身穿龙袍,召百人公开祭祖,大拇指上戴着帝王扳指《史记》曾言:吾日暮涂远,吾故倒行而逆施之。古往今来,虽社会发展稳步向前,然倒行逆施之人,却屡屡现世,虽此类群体行事张扬,然其错误举动,必遭时代抛弃,引世人鄙夷。自清王朝……55年授衔,3000位老红军不够级别评校官,毛主席一律少校建国后实行军衔制,是一支军队走向现代化和正规化必不可少的环节,同时也是军事战争的需要。可是,授衔仪式牵扯到了方方面面,出身、战功、资历等等,这其中每一个环节也必须都要考虑到,当……她被认为能获诺贝尔奖,为了祖国说过三次我愿意1964年在新疆罗布泊中国第一颗原子弹爆炸成功人们记住了钱学森、邓稼先的故事但是很少有人听过这背后还有这样一位奇女子一次次从零开始为国……包宏龙讲述三匹马的故事打记事起,父亲就不止一次地跟我讲过一个关于新四军向我家借马的故事。小时候,这成了我最为骄傲的事情,直到现在也是我心底最为靓丽的一抹红色记忆。我的老家在江苏省南通市如皋县郭……NBA最新排名!76人看到希望,湖人升至第9追近快船,西部第北京时间3月8日,NBA常规赛继续进行,今天包括湖人、勇士、76人、独行侠等豪门纷纷出战,东部的局势愈发明朗,而西部则乱成一团,特别是附加赛资格区,输一场球,排名下降4位,爵士……2014年,抗美援朝烈士遗骸回国,一老人大哭爸爸,我找不到你2014年3月28日清晨,沈阳抗美援朝烈士陵园挤满了人。平常来给烈士扫墓的人也不少,但远远没有今天多,这是为什么呢?他们没有多少人往陵园内走,反而全都挤在入口处,神色十分……1945年毛主席托人转告美国总统罗斯福我愿意去华盛顿与你会面罗斯福支持国共合作抗日的原因日本偷袭珍珠港后,美国宣布加入二战,中美正式成为盟友。罗斯福为美国制定的战争策略是先欧后亚,即以纳粹德国为主首要对手,以日本为次要对手。……被金钱断送的科学家们法国著名化学家拉瓦锡,在从事化学研究工作的同时,又在政府中充当包税官。他敲诈勒索、贪污腐败、反对革命,终于在他51岁那年被送上了断头台。诺贝尔奖金获得者,法国著名物理学家……开国将帅里面,上将中将和少将有排名吗?说起新中国的开国将帅,许多熟悉中国近代史和我军军史的朋友,一定对此非常熟悉了。这是我军军史上首次授衔仪式,奖励昔日在战场上,为新中国的建立和民族解放做出过贡献的有功之臣。在55……开国上将洪学智的夫人张文因病在北京逝世,享年103岁上个世纪的1919年在中国的四川大地上诞生了一位革命性的历史人物,一生历经革命的洗礼,无限地忠于共产党,把自己的一生毫无保留地奉献给了共产主义事业,她就是开国上将洪学智的夫人张……夜读2022下半年所有的失去,都会以另一种方式归来【夜读】2022下半年:所有的失去,都会以另一种方式归来2022下半年:所有的失去,都会以另一种方式归来音频:00:0006:35不知不觉间,2022年已经过去一半……无痛分娩送给孕妈妈珍贵的礼物今天是妇女节,很多女神们早已经谋划好要去哪里旅游、去哪里聚会。然而部分怀孕或临产的女神们却不那么轻松,一想到生孩子的痛苦,便忧心忡忡。在医学疼痛指数上,分娩痛仅次于烧伤灼……
添加剂吃多了,会致癌吗?提醒5种添加剂尽量少碰常言道:民以食为天,所有的食品安全大如天,老百姓非常关注,尤其食品添加剂,一旦有不合格,使身体的健康和生命受到威胁,导致大家对食品安全出现恐惧,很多人甚至觉得之所以有癌症,因为……1955年授衔,开国元帅除了向主席敬军礼外,为何也向总理敬了有这样的一个人在小小的年龄便表现出对国家对人民的奉献精神,为中华崛起而读书,在少年时便对自己的未来有清楚的规划。生在乱世,不惜付出自己的全部为了祖国的崛起,为了民族日后的繁荣。……醒醒吧!目前的经济状况下,该如何自保?大家也知道,因为口罩的原因,现在的大环境可以说得上是非常严峻,上到国企业受到影响,下到各个实体经济,私企、民企、个体经营都受到重创。实体经济萎靡不振感受最为深刻的当……失踪107年!泰坦尼克号之后最大的沉船被找到极目新闻记者胡秀文据英国《太阳报》报道,耐力号(Endurance)是泰坦尼克号之后最大的沉船发现。耐力号是南极探险家欧内斯特沙克尔顿爵士的船,沉没一个多世纪后,3……此书得来不易此物得来不易,听说朋友的老父亲,有一本收藏多年的,人民画报增刊,而且还是1976年的老物件,参观后就想纳入囊中,怎奈朋友的老父亲一口回绝,之后我有事没事的往他家跑,老爷子喜欢喝……日本有大谷翔平,韩国有孙兴慜,我们的下一个体育巨星在哪里?近日,一条棒球方面的体育消息成为网友热议的话题,日本棒球运动员大谷翔平以全票的成绩获得职棒大联盟的MVP,这个成绩相当于2016年全票获得MVP的库里。这是日本棒球的一个里程碑……我愿意成为一个反叛者,而不是一个奴隶先生,我是沃茨太太。请叫我莫德。爱普索姆赛马场的事故1913年,一位妇女跨过栏杆,闯进爱普索姆赛马场的跑道。奔跑的马匹剧烈撞击了这位妇女,这位倒下的妇女手上,……新一代青年干部要有谦卑之心夏爽组织部谦虚谨慎,低调内敛,不仅仅是一种性格特质,还能彰显一个人的精神境界和胸襟气量。历史上也有许多人都有同样的感慨。汉高祖刘邦也曾说,夫运筹策帷帐之中,决胜千里之外,……铜产业循环经济基地当好店小二跑出加速度去年以来,铜基地作为贵溪市经济建设的主战场,努力扮演好服务企业的店小二角色,积极探索,大胆创新,不断加快新旧动能转换,园区呈现出速度与深度并进、质量与效益共升的高质量发展态势。……eStar冠军五人组包揽最佳,清融百分百胜率太离谱,久诚CaeStar冠军五人组包揽KPL秋季赛最佳阵容一队,TTG除冰尘之外全部上榜,阿改辅助崭露头角KPL秋季赛结束之后也是照常举办了最佳阵容的评选,这个赛季与之前赛季几乎不同,……中日女乒经典之战,王曼昱横扫伊藤美诚,绝对的实力碾压如果说陈梦是伊藤美诚的噩梦,那王曼昱对伊藤来说可以算得上是噩梦中的噩梦,陈梦虽然每次碰上伊藤美诚都获得胜利,还被国乒当作定海神针来等着最后镇压伊藤美诚,但却也才只打了四次,更何……清朝这一世啊明朝是中国最后一个汉族王朝,从1368年到1644年,明王朝走过了276年的风风雨雨,经历了16位曾坐拥江山的帝王,从明太祖朱元璋揭竿起义加强了专制主义中央集权的洪武之治到明思……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网