首页 新闻 会员 周边

C#关于lock竟然还有不能锁住的时候???

0
悬赏园豆:20 [已解决问题] 解决于 2020-07-07 09:23

代码有静态属性 public static int HuizongPoint { get; set; } = 0;
想用lock实现对该属性的同步操作,但是根据日志显示,发送没用!!!这是为什么?
测试步骤如下:
1、添加锁的对象 private static readonly object oHuizongPoint = new object();

2、在函数方法中加入lock锁,并在进入锁和退出锁中加入一条日志。

3、多线程执行后,发现多线程是一起进入函数的,并没有实现等待锁,同步执行的操作。

C#
😀明笔记的主页 😀明笔记 | 初学一级 | 园豆:13
提问于:2020-07-03 17:37
< >
分享
最佳答案
0


拿了另外一个代码测试了一下,实验得出是因为:
1、使用了语句txtRValue.Invoke(new EventHandler....放在了lock前面。
2、后续如果添加了Application.DoEvents();或txtRValue.Invoke(new EventHandler(delegate....就会导致lock资源释放,实现不了lock锁定
3、解决办法,是将lock放在txtRValue.Invoke前面

😀明笔记 | 初学一级 |园豆:13 | 2020-07-07 09:17

lock一般用在纯计算,资源调度等方面。
lock里面还有ui操作我也是没想到的,ui的线程机制是另一回事。

日暮青色 | 园豆:475 (菜鸟二级) | 2020-08-19 09:52
其他回答(2)
0

...你精确到ms试试

收获园豆:15
猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-06 09:21

但是第一次的还没有结束汇总,第二次就进入了

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 09:23

@😀明笔记:
LogLostData(“....”+Thread.ID)

按照线程id对一下

支持(0) 反对(0) 猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-06 10:34

@猝不及防:
在后面添加了这句Thread.CurrentThread.ManagedThreadId,日志显示:

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 10:51

@猝不及防: 同一线程不会造成资源争抢??如何防止即使是同一线程,也不能同时执行这个函数呢?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 10:59

@😀明笔记: 你是咋写的多线程的..同一线程不存在同时执行这个函数的问题

支持(0) 反对(0) 猝不及防 | 园豆:2781 (老鸟四级) | 2020-07-06 11:04

@猝不及防:
1、同时执行4个多线程

2、多线程执行同一个委托

3、这个委托会进入同一个函数里,就是上述的含有日志的函数,此时委托进入该函数,不受lock限制为什么?

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 11:14
0

Huizong函数重入了?
执行代码里有调用Huizong?

收获园豆:5
日暮青色 | 园豆:475 (菜鸟二级) | 2020-07-06 13:41

没有的

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 13:42

@😀明笔记: 很奇怪。
Huizong函数的4个引用是什么?

支持(0) 反对(0) 日暮青色 | 园豆:475 (菜鸟二级) | 2020-07-06 13:57

@日暮青色: 用在其他函数中,这里的问题不涉及到那3个引用

支持(0) 反对(0) 😀明笔记 | 园豆:13 (初学一级) | 2020-07-06 13:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册