2013-03-27 217 views

回答

1

在一份声明: 原子事务是最小的一组操作执行所需的步骤。 所有这些必需的操作都发生(成功)或原子事务失败。

原子操作通常有毫无共同之处交易。据我所知,这来自硬件编程,其中一组操作(或一个)恰巧立即得到解决。

1

为了获得更广泛的图片,你可以看看:

从上面引用的资源的一些话:

关于datab ASES:

在一个原子事务,一系列的数据库操作要么全部 发生,或没有发生。原子性的保证可以防止数据库更新部分发生,这会比直接拒绝整个系列造成更大的问题。换句话说,原子性意味着不可分性和不可约性。

关于编程:

在并发编程,操作(或一组操作)是 原子,线性化,不可分割或不间断如果它似乎 该系统的其余部分发生瞬间。原子性是保证从并发进程中隔离出来的。此外,原子 操作通常有一个成功,或失效的定义 - 他们要么 成功地改变系统的状态,或者没有明显 效果。

我看到这个词应用较多的数据库和编程操作交易,尤其是在内核级编程。

1

原子性的概念是原子事务和原子操作之间常见的,但它们通常与不同的域。

原子事务与数据库操作相关联,其中一组动作都必须完成,否则他们没有完成。例如,如果某人预订了航班,您希望既获得付款又预留座位,否则都不会。如果任何一个成功获得成功,而另一个成功,那么数据库将不一致。

另一方面,原子操作通常与关于多处理或多线程应用程序的低级编程相关联,并且与临界区类似。 例如,如果两个线程都访问和修改相同的变量,每个线程经过以下步骤:

  1. 阅读来自存储变量到本地存储器。
  2. 修改本地内存中的值。
  3. 将修改后的值写回原始存储位置。

但是在多线程系统中,中断或其他上下文切换可能发生在第一个进程读取了值但未写回之后。第二个进程(或中断)将读取并修改OLD值并将其修改后的值写回存储器。当第一个进程重新启用时,它不知道某些内容可能已更改,因此它会将其更改写回原始值。因此第二个进程对变量的操作将会丢失。 如果一个操作是原子,它保证一旦完成就不会中断。这通常使用硬件级基元来完成,例如测试和设置或比较和交换。