日期:2014-05-18  浏览次数:20887 次

求助:在多线程中事务处理的迷惑
方法A中有一个关于数据插入的事务处理。然后通过如下语句把方法A实现到100个线程中。
  Thread workTicketThread;
   
  for (int i = 0; i < 100; i++) {

  workTicketThread = new Thread(new ThreadStart(A));
  }
这样的话,既然方法A中有事务处理,当运行事物处理时会对自动数据库上锁,那么线程1锁定了数据库后,线程2-100这99个线程中

的A方法将不能操作数据库,这样的话多线程是不是就没有意义了。。。不知道我理解的对不对?请高手解答








------解决方案--------------------
第一个进入事务后,其它线程也可以访问数据库,但可能引起错误,对数据库操作,特别是写数据库,建议线程互斥,不要同时操作
------解决方案--------------------
使用事务锁
多线程写同一张表,根据设计要求来的,不建议操作
大批量数据insert 使用sqlbulkcopy
是线程越多处理速度越快,线程多了频繁调度反而和降低性能
线程1处理n1——n2之间的记录;
线程2处理n2+1——n3之间的记录
new Thread((ThreadStart)delegate { test1(); }).Start();
new Thread((ThreadStart)delegate { test2(); }).Start();
new Thread((ThreadStart)delegate { test3(); }).Start();