seegongsik
我的单词本
操作系统

同时改同一样东西

两人同一个瞬间改同一样东西,结果可能就乱。一个一个来才对。

01

两个人改同一格

墙上贴着一张写了数字的便条。现在是10。两个人各自想往上加1。
一个人看到10,心里算出11,在便条上写下11。另一个人也照样做。可要是两人几乎同一个瞬间开始,两人看到的都是原来的10,两人写下的都是11。
加了两次1,本该是12,结果却是11。少了一次。这就是同一个瞬间改同一样东西闹出的事故。

10AB读 10读 10111111写 11写 11本该12却11少了一次

两人同时改同一个值,加的里头有一个就没了

同一个瞬间改同一样东西,结果可能就乱了。

02

同样的动作,不一样的结果

还是那两个人,还是各加1,可只把时机改一改。
轮着来:一个人看到10,写下11,做完了,另一个人再看着那个11,写下12。结果12,对的。
撞着来:一个人读了10,还没来得及写,另一个人也把10读走了。两人都写11,结果是11,错了。
动作一模一样。就因为谁在什么时候插了进来,单单这个时机,分出了对和错。

轮着来A 10B 11111212撞着来A 10B 1011

同样是加,轮着来就对,撞一块就错

分出结果的不是动作,而是谁在什么时候插进来的时机。

03

自己来撞撞看

两个工人各自往同一个值上加1。两人开始时撞得多紧,自己来调一调。
拉得够开,一个做完另一个才开始,结果就对。靠得近了,一个还没写另一个就读走了,一次就没了。
拖动滑块,看看从哪个点开始结果就崩。同样的两个动作,可一撞上,结果就塌了。

AB
12结果对
重叠20%
拉开就对,是12,撞上就错,成了11。自己找找从哪儿开始变红。

改改撞的紧密程度,看看从哪儿开始结果就崩

把两人拉开结果就对,撞得越紧,崩的风险就越大。

04

要是一个一个轮着来

那怎么防呢。答案很简单。在改同一样东西的工夫,只让一个人动手。
一个人读、改、写的这段时间,别人都等着。这一组做完,下一个人才开始。就像排一个只有一间的厕所。里头有人,门就锁上,出来了下一个才进。
这么一来就没有撞的机会,结果就总是对的。代价是多了等待的时间。为了安全,接受排一小会儿队。

12A使用中B等着一个一个,不撞代价是等待

改同一样东西的工夫只许一个人,其余排队等着

让大家一个一个轮着改同一样东西,撞就没了,结果就安全了。

05

一页纸总结

记住三点就够了。
第一,同一个瞬间改同一样东西会出事故。两人同时加就少一次那样,结果可能就乱。
第二,问题不在动作,在时机。同样的活儿轮着来就对,撞一块就错。第三,让大家一个一个来就安全。改同一样东西的工夫只许一个人,其余排队等着,结果就总是对的。

同一个瞬间改同一样东西会出事故。两人同时加就少一次。
问题不在动作,在时机。轮着来就对,撞一块就错。
一个一个来就安全。只许一个人动,其余排队,结果就总是对的。

同时加共用是事故,时机是问题,一个一个就安全

一句话总结同一个瞬间改同一样东西结果可能就乱,让大家一个一个轮着来就能防住。
如果有帮助,请支持我们
操作系统