C#的Lock可以锁什么?

为什么不锁值类型(object)123呢?

为什么不锁字符串"123"呢?

为什么不锁公共类型public呢?

为什么不锁类型People.GetType()呢?

 

上边的都可以编译过去,但是锁的范围不同;锁存在是为了避免某些线程们的鲁莽闯入,锁的东西在这些线程中必须是唯一的

 

锁值类型(object)123:装箱一次生成一个新对象,等于没上锁

锁字符串"123":如果字符串仅仅在程序集范围内唯一

锁公共public属性:被意料外的地方访问 或者说其他地方访问这个与锁的逻辑没有关系,那么锁的范围太大了

锁类型People.GetType():其他应用如果也锁这个类型 结果会怎么样

 

所以常规锁法private static object可靠些

posted @ 2022-11-08 21:51  那只狐狸  阅读(44)  评论(0编辑  收藏  举报