是否需要为了线程安全(和正确性)创建一个占位符锁对象,或者是否足以锁定资源本身(假设没有其他代码需要它)。
锁定System.Random
private static readonly Random rnd = new Random();
public static int Rand(int min, int max) {
lock(rnd) {
return rnd.Next(min, max);
}
}
使用单独的占位符/虚拟锁对象
private static readonly Random rnd = new Random();
private static readonly object rndLock = new object()
public static int Rand(int min, int max) {
lock(rndLock) {
return rnd.Next(min, max);
}
}
这看起来似乎微不足道,但我关心的是第一个代码块是否容易出现死锁或其他问题
答案 0 :(得分:1)
我们避免锁定对象本身的原因是为了避免无意中锁定的情况,如果"对象本身"公开曝光。如果你只使用"对象本身"在私人类或方法中,使用您建议的方法没有任何害处。