由于并发线程,缓存变得无限大

Cache growing infinitely large because of concurrent threads

我有一个缓存对象,旨在保存跨模块共享的变量。

并发线程正在使用缓存处理程序访问和写入该缓存对象,该缓存处理程序使用变量锁定来保持缓存完整性。

缓存将所有变量保存在一个唯一的会话 ID 下。创建新会话 ID 时,它必须引用旧会话 ID,将一些变量复制到新会话中。

一些会话 ID 也会同时 运行。

我需要在所有并发线程完成对缓存的引用后立即清除缓存,并且所有新会话都已将变量从缓存复制到它们的会话中。

问题...

我不知道什么时候清除缓存是安全的。

我有数百个线程进行 API 可变时间调用。新会话将产生新线程。我不能只查看活动线程来确定何时清除缓存。

我的缓存将增长到无限大并最终导致程序崩溃。

我相信这一定是一个普遍的问题。那些比我聪明得多的人都通过了。

关于如何最好地解决这个问题有什么想法吗?

你可以通过锁定来解决这个问题...创建一个 Cleaner 线程,它有时会锁定缓存(获取你拥有的所有锁)并清除它,然后释放锁...

(如果你对缓存的不同部分有很多锁,你也可以逐个锁定和清除缓存...)