原子操作和原子事务

use*_*378 11 atomicity

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

小智 10

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

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

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

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

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


Naj*_*ero 6

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

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


Jea*_*ean 6

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

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

关于数据库:

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

关于编程:

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

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