嗨,根据http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx 可以声明一个对象用于锁定:
private Object thisLock = new Object();
但是当我需要从静态方法锁定它时,我需要将其声明为静态:
private static Object thisLock = new Object();
然后更多来自MSDN页面,
lock(" myLock")是一个问题,因为进程中使用相同字符串的任何其他代码都将共享同一个锁。
因此,如果它是一个静态对象而不是一个字符串,当多次调用同一个方法时,它会遇到问题,每个方法都会尝试锁定thisLock,因为它是同一个静态对象所以他们实际上是在共享锁?
感谢您的时间。
答案 0 :(得分:4)
因此,如果它是一个静态对象,而不是一个字符串,当多次调用相同的方法时会出现问题
不完全是。字符串很特殊,可以实习。您无法像其他对象那样控制其可见性。
基本准则:
因为它是相同的静态对象,所以它们实际上是共享锁?
访问共享资源的所有代码都共享(锁定)同一个lockObject实例。私人锁不起作用。