代码有静态属性 public static int HuizongPoint { get; set; } = 0;
想用lock实现对该属性的同步操作,但是根据日志显示,发送没用!!!这是为什么?
测试步骤如下:
1、添加锁的对象 private static readonly object oHuizongPoint = new object();
2、在函数方法中加入lock锁,并在进入锁和退出锁中加入一条日志。
3、多线程执行后,发现多线程是一起进入函数的,并没有实现等待锁,同步执行的操作。
拿了另外一个代码测试了一下,实验得出是因为:
1、使用了语句txtRValue.Invoke(new EventHandler....放在了lock前面。
2、后续如果添加了Application.DoEvents();或txtRValue.Invoke(new EventHandler(delegate....就会导致lock资源释放,实现不了lock锁定
3、解决办法,是将lock放在txtRValue.Invoke前面
lock一般用在纯计算,资源调度等方面。
lock里面还有ui操作我也是没想到的,ui的线程机制是另一回事。
...你精确到ms试试
但是第一次的还没有结束汇总,第二次就进入了
@😀明笔记:
LogLostData(“....”+Thread.ID)
按照线程id对一下
@猝不及防:
在后面添加了这句Thread.CurrentThread.ManagedThreadId,日志显示:
@猝不及防: 同一线程不会造成资源争抢??如何防止即使是同一线程,也不能同时执行这个函数呢?
@😀明笔记: 你是咋写的多线程的..同一线程不存在同时执行这个函数的问题
@猝不及防:
1、同时执行4个多线程
2、多线程执行同一个委托
3、这个委托会进入同一个函数里,就是上述的含有日志的函数,此时委托进入该函数,不受lock限制为什么?
Huizong函数重入了?
执行代码里有调用Huizong?
没有的
@😀明笔记: 很奇怪。
Huizong函数的4个引用是什么?
@日暮青色: 用在其他函数中,这里的问题不涉及到那3个引用