这是一个与编程语言无关的问题,因为它涉及任何开发平台上可能发生的情况。
- 让我们假设您有一个资源以某种方式缓存,该资源将根据经过的时间过期。
- 该资源将在多线程环境中访问。
- 资源会定期过期,我们只希望一个线程重新生成缓存,其他线程应该等待并返回第一个线程获取的资源。
- 为了减少开销,我们只想在资源过期时执行资源锁,允许无锁缓存读取。
我想知道是否有处理这种情况的通用设计模式?
这是我解决问题的伪代码尝试:
// check for resource. If it exists return it.
if(inCache()) {
return getCachedResource();
}
// resource has expired, sychronize users so only
// one executes the following block at a time
lock {
// check if a previous request re-cached the resource
if (inCache()) {
return getCachedResource();
}
// get the resource
getResource();
return getCachedResource();
}
有没有更好的方法来解决这个问题?是否还有其他我可能没有考虑到的问题?