我实现了一个高性能线程安全组件,不使用锁定语句,出于性能原因仅使用 volatile 和 Interlocked。
我在一个包含线程安全实例的类中有 volatile 引用类型成员。此实例仅对几个操作是线程安全的,而对另一个则不是。因此,出于性能原因,在某些情况下,我更喜欢创建新实例而不是更新原始实例,而且它确实工作得更快,特别是因为我不使用任何锁定语句。
因此 volatile 成员可以随时替换为另一个实例, volatile 关键字确保在多线程环境中不会出现任何问题。
这当然工作得很好,但唯一的问题是旧实例的垃圾收集。在测试我的组件的性能时,我发现它在垃圾收集释放的实例上花费了太多时间。
现在我正在寻找一种方法来回收旧实例。问题是我不能在替换时只使用旧实例并重置它的状态,因为可能有另一个线程仍在使用这个实例,我找不到一种方法(没有锁)来保证没有人使用这个实例了。
我如何保证没有线程使用没有锁语句的旧实例?(volatile 和 Interlocked 是首选)
谢谢。