锁定高速缓存资源再生的设计模式

时间:2013-07-02 00:50:27

标签: caching locking

这是一个与编程语言无关的问题,因为它可以解决任何开发平台上可能出现的情况。

  1. 让我们假设您有一个资源,该资源以基于时间过去的方式缓存。
  2. 将在多线程环境中访问该资源。
  3. 资源定期过期,我们只希望一个线程重新生成缓存,其他线程应该等待并返回第一个线程获取的资源。
  4. 为了减少开销,我们只希望在资源过期时执行资源锁定,从而允许无锁缓存读取。
  5. 我想知道是否有一种常见的设计模式来处理这种情况?

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

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

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

0 个答案:

没有答案