【发布时间】:2013-01-18 06:09:44
【问题描述】:
我有一堂课MyClass。这个类有一个字段:public ReaderWriterLockSlim rw;(为了更简单的示例代码而公开)。许多线程可以使用rw.EnterReadLock等从MyClass读取数据。
我也实现了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
}
【问题讨论】:
标签: c# idisposable readerwriterlockslim