【转】什么是原子性,什么是原子性操作?

原文来自:http://www.runoob.com/redis/redis-intro.html

什么是原子性,什么是原子性操作?

举个例子:

A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:

  • 1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
  • 2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。

如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。

我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。

如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。

时间: 2024-10-08 14:55:13

【转】什么是原子性,什么是原子性操作?的相关文章

程序的原子性,python实现原子性,上锁解锁threading.Lock()

A想要从自己的帐户中转1000块钱到B的帐户里.那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务.在这个事务里,要做如下操作: 1. 从A的帐户中减去1000块钱.如果A的帐户原来有3000块钱,现在就变成2000块钱了. 2. 在B的帐户里加1000块钱.如果B的帐户如果原来有2000块钱,现在则变成3000块钱了. 如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱.那么,我们称这个操作失败了,要

事务的原子性

事务的原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行.这种特性称为原子性.  事务的原子性要求,如果把一个事务看作是一个程序,它要么完整的被执行,要么完全执行.就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库.这种特性称为原则性  假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新.前者称事务已提交,后者称事务撤销.DBMS必须确保由成功提交的事物完成的所有操作在数据库内

事务的原子性,一致性,隔离性,持久性

事务的原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行.这种特性称为原子性.  事务的原子性要求,如果把一个事务看作是一个程序,它要么完整的被执行,要么完全执行.就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库.这种特性称为原则性  假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新.前者称事务已提交,后者称事务撤销.DBMS必须确保由成功提交的事物完成的所有操作在数据库内

4-15 OS(线程,用户态,内核态,页) 数据库(原子性,日志) JAVA(I/O)

在internet services课上老师说到Capriccio 是用户模式下的thread library,OS课里第2个project也是实现一个用户模式下的线程库.之前用过POSIX库,我知道这是在内核模式里的线程库,那就表示由内核来创建.调度线程吧.但内核就像一个黑盒,一直不明白它做了什么,怎么做到的.Modern Operating System有章讲user space和kernel space控制线程. 在user space:所有线程的管理都在用户区,内核不知道多线程的存在.在

大尺度原子性的实现

写在前面的话 原子意为不可再分.组成万物的基本元素.“不可再分”,在现代科学面前,略显尴尬,但在表达其本意时,大家都能领会其神,这真是极好的. 计算机科学领域的原子性,引申为一系列的操作,要么全部成功,要么全部失败,从“全部失败”(一系列操作都没有开始执行)的初始状态到“全部成功”(所有操作全部执行完毕)的之间再无其他状态. 在基本的原子操作之上,构建更大尺度的原子操作,是本文要探讨的主题. 现实中的原子性 为了加深原子性的印象,试举几个栗子. 12306就做得挺好,一开始大家看到的都是“有座,

原子性与可见性

一.定义 1.可见性 在多核处理器中,如果多个线程对一个变量(假设)进行操作,但是这多个线程有可能被分配到多个处理器中运行,那么编译器会对代码进行优化,当线程要 处理该变量时,多个处理器会将变量从主存复制一份分别存储在自己的片上存储器中,等到进行完操作后,再赋值回主存.(这样做的好处是提高了运行的速度,因 为在处理过程中多个处理器减少了同主存通信的次数):同样在单核处理器中这样由于“备份”造成的问题同样存在! 这样的优化带来的问题之一是变量可见性——如果线程t1与线程t2分别被安排在了不同的处理

事务的 原子性、一致性、隔离性、持久性

事务的原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行.这种特性称为原子性.  事务的原子性要求,如果把一个事务看作是一个程序,它要么完整的被执行,要么完全执行.就是说事务的操纵序列或者完全应用到数据库或者完全不影响数据库.这种特性称为原子性  假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新.前者称事务已提交,后者称事务撤销.DBMS必须确保由成功提交的事物完成的所有操作在数据库内

内存管理_原子性、可见性、有序性

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行 比如存取款操作,存款和取款操作必须全部完成,或者全部不完成. 可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值. eg: //Thread 1 int i = 0; i = 10; //Thread 2 j = i; 假若执行Thread1的是CPU0,执行Thread2的是CPU1.由上面的分析可知,当Thread1执行 i =10这句时,会先把i的初始

Java并发之原子性,有序性,可见性,以及Happen-Before原则

原子性 原子性是指一个操作是不可中断的.即使是在多个线程一起执行的时候,操作一旦开始,也不会被其他线程干扰.即原子操作是一个做小操作. 例如 i++,其实经历了读,算,赋值绝对算不上是一个原子操作.一个i = 10这样的赋值操作可以称为原子操作. java.util.comcurrent.atomic包里都是关于原子操作的类,有时间会另写一篇博客. 有序性 提到有序那必然就有乱序,而乱序是因为jvm的指令重排优化而产生的. 我们要想完全保住有序性,需要给对象加同步锁(synchronized),