对象锁定实例成员以同步对它的访问

时间:2014-09-10 23:02:54

标签: c# multithreading concurrency parallel-processing locking

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

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

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

1 个答案:

答案 0 :(得分:1)

我们避免锁定对象本身的原因是为了避免无意中锁定的情况,如果"对象本身"公开曝光。如果你只使用"对象本身"在私人类或方法中,使用您建议的方法没有任何害处。