gpt4 book ai didi

.net - 是否有必要在信号量上调用 Dispose?

转载 作者:行者123 更新时间:2023-12-04 06:42:07 25 4
gpt4 key购买 nike

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 会被释放并被收集吗?

如果没有,知道何时调用 _sync.Dispose() 的最佳方法是什么?

最佳答案

简短回答:不,您不需要调用 Dispose()。

长答案:

虽然建议在使用完信号量后调用 Dispose(),但垃圾收集器迟早会处理信号量的资源。

显式调用 Dispose() 将保证相关资源的早期释放,但仅当您在短时间内创建并忘记大量信号量实例时才需要这样做。

如果您调用 Dispose(),则使用简单的 Dispose() 调用完全没问题。您不需要创建终结器 ~myclass()因为那只会重复已经完成的信号量实现。

关于.net - 是否有必要在信号量上调用 Dispose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13452978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com