大家好,我碰到一个问题,希望大家可以帮帮我,先谢过了呵呵: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条取出的数据还要多,就不对了呀如何解决呢?估计是线程冲突的问题吧?望高手帮助解答,感谢之。
我有个用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条取出的数据还要多,就不对了呀如何解决呢?估计是线程冲突的问题吧?望高手帮助解答,感谢之。
解决方案 »
- C#读取串口线程,关闭时出现错误~~~急
- 求助,C#生成word同步问题啊
- 关于:System.ArgumentException: 列“XXX”不属于表
- C#中datagridview选中行后textbox显示选中的内容
- 受不了,VS2005安装过程中SQL2005总是装不上,求解
- 部署的时候必须包含哪些组件
- 请问如何监视某个目录(包括子目录)中的所有文件的修改、更名、删除、创建等操作?
- 请问C#中有对SAML的工具包吗?
- .NET WinForm有关xslt装换xml的问题
- 如何得到一个Sql server2000里面所有的数据库?
- 跪求网站代码!
- 添加数据库,更新数据的时候提示更新要求有效的InsertCommand错误,急死了。
这里的this是什么对象?能保证多个线程的this是同一对象吗?
估计是lock了不同对象,不然只要按顺序执行不会出现什么同步问题。
改成lock(this.GetType())试试。流程太复杂,建议写成伪代码,才看得清楚你的思路。
lock的目的就是为了在多线程的时候让多个线程串行。多线程的目的很多,并不一定是为了并行执行。
你又希望并行执行又希望没有线程冲突怎么可能呢?当然,你可以将lock更细化。
而你所做的lock似乎是没任何意义的。