Skip to main content
 首页 » 编程设计

C# 锁定私有(private)静态对象

2024年02月06日33luoye11

您好,根据 http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx 可以为了锁定目的声明一个对象:

    private Object thisLock = new Object(); 

但是当我需要从静态方法中锁定它时,我需要将它声明为静态的:

    private static Object thisLock = new Object(); 

然后更多来自 MSDN 页面,

lock("myLock") is a problem because any other code in the process using the same string, will share the same lock.

所以如果是静态对象,而不是字符串,当同一个方法被多次调用,每一次都尝试锁thisLock时,会不会有问题,因为是同一个静态对象所以他们实际上是共享锁的?

感谢您的宝贵时间。

请您参考如下方法:

So if it's a static object, instead of a string, will it have the problem when the same method is called multiple times

不完全是。字符串很特殊,它们可以被实习。您无法像其他对象那样控制它们的可见性。

基本准则:

  • 让您的 lockObject 与 protected 资源保持一对一的密切关系。在数量、范围和生命周期方面。所以使用静态锁对象来保护静态数据。
  • 尽可能保持 lockObject 的私密性,暴露它会增加死锁的风险。出于这个原因,还要避免锁定类型和字符串。

because it's the same static object so they are actually sharing the lock?

访问共享资源的所有代码必须共享(锁定)相同的 lockObject 实例。私密锁是行不通的。