【发布时间】:2015-03-19 02:59:59
【问题描述】:
我有一个 Wrapper<T> where T : class 包裹着我的对象。我将WeakReference<Wrapper<T>> 存储在ConcurrentDictionary 中,以便为不可变对象实现弱引用线程安全缓存,当其他对象需要内存时,这些对象会自动清理。我需要在Wrapper 析构函数中调用ConcurrentDictionary.TryRemove 来释放字典中不再指向有效对象的弱引用。
众所周知,我们不应该在析构函数中使用任何锁定,因为存在死锁的风险。所以我想知道,我可以在析构函数中安全地使用ConcurrentDictionary.TryRemove 吗?恐怕它可能是使用SpinLock 或其他工具实现的,因此在析构函数中使用时仍然存在死锁风险。
【问题讨论】:
标签: c# .net multithreading concurrency