我真的很难找到一个具体的,易于掌握的原子性的解释。
到目前为止,我的理解是,为了确保操作是原子的,您可以将关键代码包装在一个储物柜中。但这和我实际理解的差不多。像下面这样的定义对我一点意义都没有。
处理器可以在同一总线操作中同时读取一个位置并将其写入的操作。这将防止任何其他处理器或I/O设备在操作完成之前写入或读取内存。原子意味着不可分割和不可还原,因此原子操作必须完全执行或完全不执行。
最后一句是什么意思?indivisibility这个术语是与数学有关还是其他什么的?
有时候,与这些话题有关的行话比他们教的更让人困惑。
发布于 2014-05-24 13:33:52
原子性是一种定义手术是否可以被中断的特征。通常,它并不指lock中的一组操作。锁不能保证在锁期间没有其他任何东西可以运行,只是在锁期间,在该实例上,其他任何东西都不能运行该代码。
让我们看一个例子:int x = 4 * sin(pi)
如果没有优化,这个语句就不是原子的。
pi通常是原子化的,假设它是双倍,并且处理器可以在一个时钟周期内读取双倍。sin并返回其结果(假设sin是一些函数而不是宏)不是原子的,因为某些东西可以在运行和返回值的代码之间运行。pi将被复制到函数中,而sin不太可能是一个可变的函数。因此,虽然这是线程安全(在普通用法中),但它不是原子的。所以,要注意的关键是:
发布于 2014-05-24 18:56:04
就我个人而言,我不认为原子操作是不可替代的,毕竟你可以炸毁这台机器。我要说的是,通过各种不同效力和成本的机制,这是不可能部分完成的。
这一切要么发生了(无论多大或多小),要么根本没有发生。
发布于 2014-05-24 13:36:54
例如,你去洗手间,锁上门,做你的厕所,洗手和擦干你的手,然后打开门。
如果没有紧急情况(如火警),你就可以不受干扰地完成整个过程。这是一个单独的“黑匣子”事件,从外部的某个人的角度看,他看到了A)你进去了;B)你出来了。
(相当于火警的是较高级别的中断)。
https://softwareengineering.stackexchange.com/questions/241017
复制相似问题