/// <summary> /// 构造 /// </summary> /// <param name="al"> 对象 </param> /// <param name="name"> 对象锁的名字 </param> /// <param name="elimination"> 排斥的名称,即如果有这些名称的锁定将不能再次锁定 </param> /// <returns> 锁定范围,如果之前已锁定则为空 </returns> /// <remarks> /// 名称是大小写敏感的 /// </remarks> public static AtomLockScope CreateLock(IAtomLock al, string name, params string[] elimination) { if (al.AtomLockNames == null) { al.AtomLockNames = new List <string>(); } else if (al.AtomLockNames.Contains(name)) { return(null); } else if (elimination != null && elimination.Length > 0) { if (elimination.Any(e => al.AtomLockNames.Contains(e))) { return(null); } } using (ThreadLockScope.Scope(al)) { al.AtomLockNames.Add(name); } return(new AtomLockScope { AtomLock = al, LockName = name }); }
/// <summary> /// 构造 /// </summary> /// <param name="al"> 对象 </param> /// <returns> 锁定范围,如果之前已锁定则为空 </returns> /// <remarks> /// 名称是大小写敏感的 /// </remarks> public static AtomLockScope CreateLock(IAtomLock al) { if (al.AtomLockNames == null) { al.AtomLockNames = new List <string>(); } else if (al.AtomLockNames.Count > 0) { return(null); } using (ThreadLockScope.Scope(al)) { al.AtomLockNames.Add("AtomLockScope"); } return(new AtomLockScope { AtomLock = al }); }
/// <summary> /// 是否已锁定 /// </summary> /// <param name="al"> 对象 </param> /// <param name="name"> 对象锁的名字 </param> /// <returns> 锁定范围,如果之前已锁定则为空 </returns> /// <remarks> /// 名称是大小写敏感的 /// </remarks> public static bool IsLock(IAtomLock al, string name) { return(al.AtomLockNames != null && al.AtomLockNames.Contains(name)); }