2014-09-10 62 views
0

是否需要为线程安全性(和正确性)创建一个占位符锁对象或者是否足以锁定资源本身(假设其他代码不需要它)。对象锁实例成员来同步对它的访问

使用单独的占位符锁定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

为锁定创建单独的对象不是必需的,但强烈建议。原因包括在(重复) - [为什么锁(这){...}不好](http://stackoverflow.com/questions/251391/why-is-lockthis-bad/251668#251668)。 – 2014-09-10 23:10:08

回答

1

我们避免锁定对象本身的原因是为了避免出现无意中锁定的情况,如果“对象本身”是公开的暴露。如果您只是在私人课程或方法中使用“对象本身”,那么使用您建议的方法并没有什么坏处。