【IT168 专稿】本文介绍了处理.NET中锁的6种方法,首先我们讨论一下并发性问题,然后讨论处理乐观锁的3种方法,乐观锁不能从根源上解决并发问题,因此后面我们介绍了悲观锁,最后介绍隔离级别如何帮助我们实现悲观锁,每个隔离级别都列举了示例进行说明,使得概念更加清晰。
我们为什么需要锁?
在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这就会产生冲突,这个就是著名的并发性问题。

图 1 并行性问题漫画
如何解决并发性问题?
借助正确的锁定策略可以解决并发性问题,资源被锁定后,其它进程想要访问它就会被阻止。
并发会造成什么样的冲突?
并发主要会导致四种常见的问题,详细情况请看下表。
| 问题 | 简要描述 | 解释 |
| 脏读取 | 当一个事务读取其它完成一半事务的记录时,就会发生脏读取 |
|
| 不可重复读取 | 在每次读数据时,如果你获得的值都不一样,那表明你遇到了不可重复读取问题 |
|
| 虚幻行 | 如果update和delete SQL语句未对数据造成影响,很可能遇到了虚幻行问题 |
|
| 更新丢失 | 一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失 |
|
如何解决上述冲突?
答案是使用乐观锁或悲观锁,下面将进一步进行阐述。

图 2 乐观锁和悲观锁