程序中 线程定义是这样的:开一个数据库连接,然后开启事务,事务的隔离级别设定为IsolationLevel.ReadCommitted,操作一张表,即向表中插入一条数据然后线程池的大小定义为4,也就是同时能有4个线程一起跑这样的定义下,会不会产生资源争夺 以及死锁的可能呢……

解决方案 »

  1.   

    偶 忘了说了……线程的定义里面当然还有 当操作结束后关闭事务以及关闭连接的操作……我听说 如果是对数据库插入的话 不会产生死锁的 所以这样写……
    但是运行下来 有很小的可能性会产生CLR20r3的错,难道是死锁了?……(仅出现过一次)
      

  2.   


    ReadCommitted是许多数据库的缺省级别,这个隔离级别上,不会出现读取未提交的数据问题,但仍然无法避免不可重复读(包括幻影读)的问题。当你的系统对并发控制的要求非常严格时,这种默认的隔离级别可能无法提供数据有效的保护,但对于决大多数应用来讲,这种隔离级别就够用了。也就是说很可能会出现死锁。http://www.cnblogs.com/zhenyulu/articles/330494.html
      

  3.   

    我也是这么觉得……
    但是log里面写timeout了,而且event log里面说是CLR20r3出错……我能够想到最大的可能性就是死锁了……
    难道是数据库坏掉了?啊哈哈……不会吧=。=
      

  4.   

     个人理解:
     产生死锁的四个必要条件:
    (1) 互斥条件:一个资源每次只能被一个进程使用。
    (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
      你说的这个情况,可能大部分情况下可能不会死锁,但如果下面情况就可能.
      线程1处理 A , B
      线程2处理 B, A
      线程1在处理z执行完表A等待对表B进行操作,线程1锁定了表A,等待B的权限;而同一时刻线程2执行了表B的操作锁定了表B,等待表A的访问权限,这样就互相等待,死锁。