您好,根据 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 实例。私密锁是行不通的。
