Package net.fabricmc.loom.util.cache
Class CacheEntryLock
java.lang.Object
net.fabricmc.loom.util.cache.CacheEntryLock
跨进程的按 key 细粒度文件锁工具.
每个缓存条目对应一把独立的锁文件,多个 Gradle daemon 进程在生产同一缓存条目时 通过该锁串行化,避免重复或损坏的写入。读已发布缓存的路径不应使用此工具(读路径无锁)。
-
Method Summary
-
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- 等待锁的最长时间,超时抛出GradleExceptionaction- 取得锁后执行的动作- Returns:
- action 的返回值
- Throws:
Exception- action 自身抛出的异常会原样向上传播
-