0

这是一个与编程语言无关的问题,因为它涉及任何开发平台上可能发生的情况。

  1. 让我们假设您有一个资源以某种方式缓存,该资源将根据经过的时间过期。
  2. 该资源将在多线程环境中访问。
  3. 资源会定期过期,我们只希望一个线程重新生成缓存,其他线程应该等待并返回第一个线程获取的资源。
  4. 为了减少开销,我们只想在资源过期时执行资源锁,允许无锁缓存读取。

我想知道是否有处理这种情况的通用设计模式?

这是我解决问题的伪代码尝试:

// 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();
}

有没有更好的方法来解决这个问题?是否还有其他我可能没有考虑到的问题?

4

0 回答 0