C# 多线程 多实例 Lock对象冲突问题
现象:
在一个Winform程序中,创建n个线程,并在每个线程中实例化一个类 groupserver,在该类中会lock类中的一个私有字段 checkserver ,如下面的代码,后来发现在这n个线程中,除了第一个线程,其它都无法lock到checkserver,起初还以为这些线程中的其它地方lock了该字段,后来检查没发现有lock未释放的地方。
public class groupserver
{
private object checkserver = “”;
public void Check()
{
while (true)
{
lock (checkserver)
{
…..
}
}
}
}
解决办法:
修改Lock对象的定义为
private object checkserver = new object();
原因就是在上面的赋值中,把checkserver指向的同一个对象,虽然他们并不在一个实例中,所以当第一个线程lock了该对象之后,其它线程就没办法再lock了。
老裴:80后程序员,从事互联网相关开发,2000年第一次接触电脑,2001年拥有第一张网页,2003年正式从事软件开发,2004年步入.Net阵营。Google的忠实粉丝,喜欢各种小巧的互联网应用。闲的时候喜欢与朋友们一起骑骑自行车。
RSS 订阅!
新浪微博关注!