Dot-Net
是否有必要在信號量上呼叫 Dispose?
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 實現。