C# 多线程 多实例 Lock对象冲突问题

时间: 2011-03-18 / 分类: 程序员 / 浏览次数: 691 views / 0个评论 发表评论

现象:

在一个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了。

 

发表评论

您的昵称 *

您的邮箱 *

您的网站