zne*_*eak 2 language-agnostic atomicity
我记得在某些时候,我看到了编程挑战,人们被要求用单字操作原子地读取双字.
现在,在我们继续之前,做一些澄清:
我记得,解决方案是读取最高的单词,然后读取最低的单词.然后再次读取最高的单词,如果它没有改变,那么该值可以被认为是一致的.
但是,我不确定了.假设我们有两位数01.
0).22在我们的算法读取下一个部分之前将值更改为.2;03.0.我们读了02,算法认为价值一致 ; 但实际上,它从未如此02.我对这个难题的回忆是否正确?这是我不记得的解决方案吗?
这个解决方案听起来像是一个系统,其价值不断增加或减少,而不是任意改变.
通过在值递增的系统中读取高/低/高,可以确保该值未被包裹,例如(对于一位数字)0,9变为1,0.代码如下:
read high into reg2 # Get high value.
set reg0 to reg2 minus 1 # Force entry in to loop.
while reg0 is not equal to reg2: # Repeat until consecutive highs are same.
set reg0 to reg2 # Transfer high.
read low into reg1 # Read low.
read high into reg2 # Read next high.
# Now reg0/reg1 contains high/low.
Run Code Online (Sandbox Code Playgroud)
在值可以任意改变的任何其他情况下,您需要对单独的单词进行某种测试和设置操作,有效地实现低级互斥锁以保护双字.