为什么Debug.Assert语句有时会失败?

时间:2011-07-04 02:11:46

标签: c# .net

我编写下面的代码,但有时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 ++;
   }
}

2 个答案:

答案 0 :(得分:4)

调用stockCount-1DecrementStock。 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 ++;
        }
    }
 }