业务逻辑:开了10个线程,执行select查询是否存在记录,不存在就执行insert插入记录。
问题分析:查询msdn,"INSERT 语句总是在其修改的表上获取排他 (X) 锁并在事务完成之前持有该锁。 使用排他锁时,任何其他事务都无法修改数据;仅在使用 NOLOCK 提示或未提交读隔离级别时才会进行读取操作。"
当线程a执行insert操作时,获取排他锁,其实操作系统切换线程给线程b,线程b首先请求获取排他锁,此时就符合发生死锁的条件:循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。
不知道分析的对不?