我有一堂课MyClass
。这个类有一个字段:(public ReaderWriterLockSlim rw;
公共的更简单的示例代码)。MyClass
许多线程可以从usingrw.EnterReadLock
等 中读取数据。
我也实现了IDisposable
接口:
private void Dispose (bool pDisposing)
{
{
if (pDisposing) // release managed resources
{
if (rw != null)
{
rwLockSlim.Dispose ();
rwLockSlim = null;
}
}
//--- release unmanaged resources
// some code...
isDisposed = true; // ...
}
}
如您所见,问题是MyClass
当第二个线程调用Dispose
myClass 对象时,一个线程正在使用。我无法处置 ReaderWriterLockSlim,因为它会使我的应用程序崩溃。那么我应该删除那些释放托管资源的行吗?反正 ReaderWriterLockSlim 会在不久的将来被 GC 收集,对吧?(但是这个类资源贵吗?)。
也许我应该在 Dispose 方法或其他东西中添加一些 lock(syncObject) ?
编辑:我也处理 AllocHGlobal,所以我需要等待,直到所有线程停止读取/写入myClass
.
不同的观点:
public MyClass : IDisposable
{
public void EnterReadLock (); // calls rwLockSlim.EnterReadLock,
// if object is disposed throws Exception
public void ExitReadLock (); // same as above
public void Dispose (); // wait until all threads exit from locks,
// frees unamanged resources, mark class as disposed
}