internal void Free(StringLockInfo item) { p_Locks.Remove(item); item.IsDisposed = true; item.Owner = null; //if (!p_Locks.Remove(item)) // throw new Exception(LocalResource.StringLockInfoCollection_Error_1); //item.IsDisposed = true; //item.Owner = null; //p_Frees.Add(item); }
private static bool ReadIsLock(StringLockInfo value, string key) { //key已锁定,如果不是读锁则已锁定 if (string.Equals(value.Key, key, StringComparison.OrdinalIgnoreCase)) { return(!value.IsRead); } //已有key的子键锁定,如果不是读锁则已锁定 if (value.Key.IndexOf(key + ".") == 0) { return(!value.IsRead); } //key是锁定键的子键,如果不是读锁则已锁定 if (key.IndexOf(value.Key + ".") == 0) { return(!value.IsRead); } return(false); }
private static bool WriteIsLocked(StringLockInfo value, string key) { //key已锁定,已锁定 if (string.Equals(value.Key, key, StringComparison.OrdinalIgnoreCase)) { return(true); } //已有key的子键锁定,已锁定 if (value.Key.IndexOf(key + ".") == 0) { return(true); } //key是锁定键的子键,已锁定 if (key.IndexOf(value.Key + ".") == 0) { return(true); } return(false); }
private bool TryGet(IEnumerable <string> readlocks, IEnumerable <string> writelocks, IList <StringLockInfo> locks) { if (readlocks != null) { foreach (var k in readlocks) { if (!StringLockHelper.TryLockRead(p_Locks, k)) { return(false); } } } if (writelocks != null) { foreach (var k in writelocks) { if (!StringLockHelper.TryLockWrite(p_Locks, k)) { return(false); } } } if (readlocks != null) { foreach (var k in readlocks) { StringLockInfo a = GetFromFree(k, true); p_Locks.Add(a); locks.Add(a); } } if (writelocks != null) { foreach (var k in writelocks) { StringLockInfo a = GetFromFree(k, false); p_Locks.Add(a); locks.Add(a); } } return(true); }