原子操作和原子事务

时间:2013-03-27 12:30:25

标签: atomicity

有人可以向我解释一下原子操作与原子交易之间的区别吗?在我看来,这两个是相同的。这是正确的吗?

3 个答案:

答案 0 :(得分:8)

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

原子事务与数据库操作相关联,其中一组操作必须全部完成,否则它们中的任何一个都完成。例如,如果有人预订航班,您既可以获得付款并预订座位,也可以不预订座位。如果任何一方获得成功而另一方也没有成功,那么数据库就会不一致。

另一方面,

原子操作通常与多处理或多线程应用程序的低级编程相关,并且与关键部分类似。 例如,如果两个线程都访问并修改同一个变量,则每个线程都会执行以下步骤:

  1. 将存储中的变量读入本地存储器。
  2. 修改本地内存中的值。
  3. 将修改后的值写回原始存储位置。
  4. 但是在多线程系统中,在第一个进程读取了值但未将其写回之后,可能会发生中断或其他上下文切换。然后,第二个进程(或中断)将读取并修改OLD值,并将其修改后的值写回存储。重新启用第一个进程时,它不知道某些内容可能已更改,因此会将其更改写回原始值。因此,第二个过程对变量所做的操作将会丢失。 如果操作是原子,则保证一旦开始就完成而不会被中断。这通常使用硬件级原语来完成,例如Test-and-Set或Compare-and-Swap。

答案 1 :(得分:3)

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

原子操作通常与事务没有任何共同之处。据我所知,这来自硬件编程,其中一组操作(或一组)碰巧立即得到解决。

答案 2 :(得分:2)

要获得更广泛的图片,您可以查看:

以上引用资源中的一些引用:

关于数据库:

  

在原子事务中,一系列数据库操作全部   发生,或什么也没发生。原子性保证会阻止更新   数据库只是部分发生,这可能会导致更大   问题比直接拒绝整个系列。换一种说法,   原子性意味着不可分割性和不可约性。

关于编程:

  

在并发编程中,操作(或一组操作)是   原子的,可线性化的,不可分割的或不可中断的   系统的其余部分即时发生。原子性是一种   保证与并发进程隔离。另外,原子   操作通常具有成功或失败的定义 - 它们也是   成功改变系统的状态,或者没有明显的   效果。

我已经在编程中看到事务这个词更常用于数据库操作,特别是在内核级编程中。