atomicity - 原子操作和原子事务

标签 atomicity

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

最佳答案

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

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

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

  • 将变量从存储读取到本地内存中。
  • 修改本地内存中的值。
  • 将修改后的值写回原来的存储位置。

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

    关于atomicity - 原子操作和原子事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658828/

    相关文章:

    c - 中断安全FIFO中的DMB指令

    multithreading - 原子性和不变性是并发/并行编程中解决相同问题的两种不同方法吗?

    assembly - LFENCE 的 x86-64 使用

    c++ - 如何在C++中使用原子防止关键部分访问

    language-agnostic - 原子指令

    multithreading - 原子操作有多昂贵?

    sql - 确保原子性 sql