[quote=引用 4 楼 supconan365 的回复:] 我一直以为 lock 之后 当一个线程进入 lock里面执行方法的时候 其他线程会等待 直到某个线程执行完lock里面的方法出来之后 其他线程才能进入,原来不是这样理解的? 也就是说 如果我有3个线程 那3个线程都会同时进入到lock里面执行方法吗?
我一直以为 lock 之后 当一个线程进入 lock里面执行方法的时候 其他线程会等待 直到某个线程执行完lock里面的方法出来之后 其他线程才能进入,原来不是这样理解的? 也就是说 如果我有3个线程 那3个线程都会同时进入到lock里面执行方法吗?
lock (sysObject) { dtn = SQL.GetSqlData(); ... ... } lock只能保证大括号里面的语句在同一时刻只有一个线程在操作。
在你的 dtn = SQL.GetSqlData(); 前后写两天“记录日志”语句,例如写File.WriteAllText(file, string.Format("{0} 开始 {1}\r\n", DateTime.Now, this.GetHash()); .... File.WriteAllText(file, string.Format("{0} 结束 {1}\r\n", DateTime.Now, this.GetHash());然后看看执行次序和时间,是不是真的“多个任务同时执行”了?!
File.WriteAllText(file, string.Format("{0} 开始 {1}\r\n", DateTime.Now, this.GetHash()); .... File.WriteAllText(file, string.Format("{0} 结束 {1}\r\n", DateTime.Now, this.GetHash());
你想多线程同时访问数据库的不同数据,是为了提高访问效率,那就不应该使用lock,否则跟单线程循环访问数据库有任何区别吗 还是先理清逻辑,再谈代码该如何编写
而且目测你这是在访问数据库 访问数据库,多线程可以同时访问,不会冲突,可以不用加锁 而取出的数据一样,如果你的SQL语句是一样的,取出的数据当然也是一样的 不管你是2个线程同时访问数据库,还是按顺序访问,都不应该出现数据不一致
是否获取同一部分数据,是你的业务逻辑的问题,跟加不加lock没有关系 加lock是为了解决多线程同时操作同一个对象造成的线程安全问题 比如其中一个线程在对list进行遍历操作,而另一个线程却要add或remove,那就会引起冲突,导致抛异常 而两个线程取出的数据相同,检查一下你两个线程使用的参数是否是一样的吧 如果传入的参数一样,返回的结果也必然是一样的
110,539
社区成员
642,577
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧