码迷,mamicode.com
首页 > 其他好文 > 详细

锁和并发(一)【2015.12.16】

时间:2015-12-16 17:15:12      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

并发控制模型

  1.悲观并发控制:

    A.默认冲突存在,当前进程通过获取当前数据的锁阻止其他进程的访问。

    B.读与写之间是相互阻塞。

  2.乐观并发控制:

    A.使用行版本控制保持数据被操作前的状态。

    B.读与写之间不会相互阻塞;但是写会发生阻塞,SQL SERVER会把冲突的错误信息发送给上层的应用程序。

并发造成的数据行为

  1.丢失更新

     当两个进程都读取数据A并修改了数据值,就会造成某个进程修改的数据值被覆盖。

       数据A=10

 时间 进程1   进程2
 1 SELECT A   
 2   SELECT A 
 3 UPDATA A=A+10   
 4   UPDATE A=A+20 

 

 

 

 

 

       
       运行完,数据A=30

       进程1对数据A的修改被丢失了。

  2.脏读

     进程1修改数据A值但未提交,进程2读取了修改后的数据A,随后进程1又回滚了对数据A的修改,造成进程2读取了不一致的状态值。

       数据A=10

 时间 进程1   进程2
 1 UPDATA A=A+10(未提交)  
 2   SELECT A 
 3 UPDATA A=A-10(回滚)  

 

 

 

 

 

       
       A值本身没有变化,但是进程2读取的A值为20。

  3.不可重复读

     进程1读取数据A之后,进程2修改了数据A,进程1再次读取A值,与之前读取的A值不一致。

  4.幻影

     这种行为发生在一个数据集内的部分数据被修改。

锁和并发(一)【2015.12.16】

标签:

原文地址:http://www.cnblogs.com/dongdong1979/p/5051552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!