15

有人可以向我解释一下,原子操作和原子事务有什么区别?在我看来,这两个是一回事。对吗?

4

3 回答 3

18

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

原子事务与数据库操作相关联,其中一组操作必须全部完成,否则没有一个完成。例如,如果有人预订航班,您既想获得付款又想预订座位,或者两者都不做。如果允许其中一个成功,而另一个不成功,则数据库将不一致。

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

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

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

于 2015-01-19T17:54:28.620 回答
7

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

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

关于数据库:

在原子事务中,一系列数据库操作要么全部发生,要么什么都不发生。原子性保证可防止仅对数据库进行部分更新,这可能会导致比直接拒绝整个系列更大的问题。换句话说,原子性意味着不可分割性和不可约性。

关于编程:

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

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

于 2013-03-27T12:40:59.033 回答
5

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

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

于 2013-03-27T12:33:56.107 回答