有个问题想问一下大家:
static SqlConnection myConn;
...
SqlTransation myTran = myConn.BeginTransaction;
...
连接是静态的,那么在多线程的时候,用到事务(当然是有可能需要回滚的)的情况下,需不需要加锁什么的?

解决方案 »

  1.   

    个人认为不需要。举个例子,WebApplication都是由一个WebServer控制的,对于每一个用户都创建一个新的进程,
    而每个用户进程都会进行各种操作,当然也有事务处理,
    而在开发的时候,并不需要你对这些事务处理进行特别的lock。对于多线程安全,我认为主要是针对非readonly的static类型数据,
    这种数据在多线程的时候可能会出现一个线程在读,另一个线程在写,
    从而出现问题。
    如有不对的地方,大家继续批~~
      

  2.   

    To:mmqingfeng(漠漠青峰)
    问题是搂住说连接是静态的,俺的理解就是是各个线程共享的。
    其实搂住也真无聊,让每个线程至少拥有一个数据库连接不就啥也结了?
    当然,如果线程太多,那就考虑连接池。
    所以,这里实际上连接的共享问题,细想,即使不启动事务,最好也还是不要在线程之间共享连接连接,要么就加锁。