Lock的使用注意事项

Lock 相当于Monitor.Enter 检查变量是否被lock, 有就等待,没有就可以执行代码

lock的锁对象要求为一个引用类型。它可以锁定值类型,但值类型会被装箱,每次装箱后的对象都不一样,会导致锁定无效。

对于lock锁,锁定的这个对象参数才是关键,这个参数的同步索引块指针会指向一个真正的锁(同步块),这个锁(同步块)会被复用。

lock(this) 表示锁定当前实例,其他代码中使用该实例时,会发现实例被锁定。

lock字符串也是不可取的。C#中的字符串都是被保存在字符串池中的,如果当前程序中有两个不同的string变量有相同的值,那么这两个变量会同时被lock.

标准的锁的声明如下所示:

在当前类内部声明 private static readonly object lock = new object();

posted @ 2022-11-06 18:13  鲁燕云端  阅读(90)  评论(0编辑  收藏  举报