我编写下面的代码,但有时Debug.Assert引发失败。 为什么Debug.Assert语句有时会失败,我该如何解决?
public class Warehouse
{
private int stockCount = 0;
public void DecrementStock ()
{
if ( stockCount > 0 )
stockCount--;
Debug.Assert ( stockCount >= 0 )
}
public void IncrementStock()
{
stockCount ++;
}
}
答案 0 :(得分:4)
调用stockCount
时-1
为DecrementStock
。 if条件将导致stockCount--
被跳过,然后stockCount
仍为-1
并触发Debug.Assert
。
如果这些是唯一触及stockCount
的函数,那么
IncrementStock
以使值溢出或
DecrementStock
根据您的评论,我认为来自多个线程的非同步访问确实是问题。
答案 1 :(得分:4)
这真的闻起来像一个多线程问题。我建议lock
围绕stockCount
成员访问。
public class Warehouse
{
private int stockCount = 0;
private object stockSynch = new object();
public void DecrementStock ()
{
lock(stockSynch)
{
if ( stockCount > 0 )
stockCount--;
Debug.Assert ( stockCount >= 0 )
}
}
public void IncrementStock()
{
lock(stockSynch)
{
stockCount ++;
}
}
}