大家好,我碰到一个问题,希望大家可以帮帮我,先谢过了呵呵:D问题大致是这样的:
我有个用C#写的Windows Service,运行于win2003(.net1.1)中,我在程序中,开了线程做这样的操作,先lock(this),然后开一个事务(锁定属性为System.Data.IsolationLevel.ReadCommitted),调出数据库中5条状态为1001的数据,并且把他们的状态修改从1001改为1002,存回数据库,然后完成事务,接着对应刚才的5条数据依次一个个的做一些其他操作,操作完成一个后,再开事务(锁定属性为System.Data.IsolationLevel.ReadCommitted),然后将另一个表中的某行数据的一个int字段+1,然后完成事务,一直到这5个数据依次被执行完毕。问题出来了,在1个线程的时候没有任何问题,然后我将线程数调整为10的时候,最后面加的那个1的那个int字段比总的一次5条取出的数据还要多,就不对了呀如何解决呢?估计是线程冲突的问题吧?望高手帮助解答,感谢之。

解决方案 »

  1.   

    lock(this)
    这里的this是什么对象?能保证多个线程的this是同一对象吗?
    估计是lock了不同对象,不然只要按顺序执行不会出现什么同步问题。
    改成lock(this.GetType())试试。流程太复杂,建议写成伪代码,才看得清楚你的思路。
      

  2.   

    不是吧?既然你想多个线程并发执行,那你要lock做什么呢?
    lock的目的就是为了在多线程的时候让多个线程串行。多线程的目的很多,并不一定是为了并行执行。
    你又希望并行执行又希望没有线程冲突怎么可能呢?当然,你可以将lock更细化。
    而你所做的lock似乎是没任何意义的。