sclass MechListDependentCaches { Map> byList = ciMap(); O maker; // func(S) -> A transient Lock lock = lock(); *(O *maker) {} A get(S name) { MechListDependentCache listCache; { lock lock; listCache = byList.get(name); if (listCache == null) byList.put(name, listCache = MechListDependentCache(name, maker)); } ret listCache!; } }