C++中的一个常见模式是创建一个包装锁的类-该锁在创建对象时隐式获取,或在创建对象后显式获取。当对象超出范围时,dtor会自动释放锁定。
是否可以在C#中执行此操作?据我了解,无法保证对象超出范围后C#中的dtor何时运行。
澄清:
一般而言,任何锁,自旋锁,ReaderWriterLock等等。
调用Dispose self会破坏模式的目的-退出范围后立即释放锁-无论我们在中间调用return,引发异常还是什么都不会。
而且,据我了解,使用仍然只会将对象排队等待GC,而不是立即销毁它...
最佳答案
您对using
的理解是不正确的,这是一种使确定范围的操作以确定性方式发生的方式(不会对GC进行排队)。
C#提供了lock
关键字,该关键字提供了排他锁,如果您要使用其他类型(例如读/写),则必须使用using
语句。
P.S. This thread可能会让您感兴趣。