예제 #1
0
        /// <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
            });
        }
예제 #2
0
 /// <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
     });
 }
예제 #3
0
 /// <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));
 }