Dot-Net

是否有必要在信號量上呼叫 Dispose?

  • December 20, 2013
class myclass 
{
   private Semaphore _sync;

   myclass ()
   {
         _sync = new Semaphore(1,1);
   }

   doasync()
   {
          _sync.WaitOne();
          //do some stuff
          _sync.Release();
   }
}


somefunctionsomewhere() 
{
    var myobject = new myclass();    
    //spawn 100 threads that all call myobject.doasync()
}

以上安全+乾淨嗎?當所有 100 個執行緒都完成它們的非同步工作時,是否會同時處理 _sync 和 myclass ?

如果沒有,知道何時呼叫 _sync.Dispose() 的最佳方法是什麼?

簡短回答:不,您不需要呼叫 Dispose()。

長答案:

雖然建議您在使用完信號量後呼叫 Dispose(),但垃圾收集器遲早會處理信號量的資源。

顯式呼叫 Dispose() 將保證相關資源的早期釋放,但僅當您在短時間內創建並忘記大量 Semaphore 實例時才需要它。

如果您呼叫 Dispose(),那麼使用簡單的 Dispose() 呼叫就可以了。您不需要創建終結器~myclass(),因為這只會複製已經完成的 Semaphore 實現。

引用自:https://stackoverflow.com/questions/13452978