Class CacheEntryLock

java.lang.Object
net.fabricmc.loom.util.cache.CacheEntryLock

public final class CacheEntryLock extends Object
跨进程的按 key 细粒度文件锁工具.

每个缓存条目对应一把独立的锁文件,多个 Gradle daemon 进程在生产同一缓存条目时 通过该锁串行化,避免重复或损坏的写入。读已发布缓存的路径不应使用此工具(读路径无锁)。

  • Method Details

    • withLock

      public static <T> T withLock(Path lockRoot, String key, Duration timeout, Callable<T> action) throws Exception
      在按 key 取得的跨进程文件锁保护下执行 action.

      取得锁后会把持有者信息(PID、工作目录、时间)写入旁文件 <hash>.lock.owner, 供其它等待进程读取并播报「锁被谁持有」;释放锁时删除旁文件。持有者信息不写入锁文件本体, 因为 Windows 的文件锁是强制锁,其它进程读被锁文件会被拒绝。

      Type Parameters:
      T - 动作返回值类型
      Parameters:
      lockRoot - 锁文件所在目录,会按需创建
      key - 缓存条目的逻辑 key,内部以其 sha256 命名锁文件
      timeout - 等待锁的最长时间,超时抛出 GradleException
      action - 取得锁后执行的动作
      Returns:
      action 的返回值
      Throws:
      Exception - action 自身抛出的异常会原样向上传播