C# 对象锁定实例成员以同步对其的访问

C# 对象锁定实例成员以同步对其的访问,c#,multithreading,concurrency,parallel-processing,locking,C#,Multithreading,Concurrency,Parallel Processing,Locking,是否有必要创建占位符锁对象以确保线程安全(和正确性),或者锁定资源本身就足够了(假设没有其他代码需要它) 锁定系统。随机 private static readonly Random rnd = new Random(); public static int Rand(int min, int max) { lock(rnd) { return rnd.Next(min, max); } } 使用单独的占位符/虚拟锁对象 private static reado

是否有必要创建占位符锁对象以确保线程安全(和正确性),或者锁定资源本身就足够了(假设没有其他代码需要它)

锁定系统。随机

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);
    }
}

这可能看起来微不足道,但我关心的是第一个代码块是否容易死锁或其他问题

我们避免锁定对象本身的原因,是为了避免在“对象本身”公开的情况下无意中锁定。如果您仅在私有类或方法中使用“对象本身”,则使用您建议的方法并无害处。

不需要为锁创建单独的对象,但强烈建议您这样做。原因见(副本)-。