using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace Island.StandardLib.Utils { /// /// 一组不精确的非原子锁 /// /// 锁定项标识,需要实现 public class LockerList { readonly ConcurrentDictionary mapLck; readonly object globalLck; public LockerList() { mapLck = new ConcurrentDictionary(); globalLck = new object(); } /// /// 加读锁 /// /// 标识 public void Lock(LockIdType lckId) { if (mapLck.TryGetValue(lckId, out bool __lck)) { do Thread.Sleep(1); while (__lck); lock (globalLck) mapLck[lckId] = true; } else { lock (globalLck) mapLck.TryAdd(lckId, true); } } /// /// 解锁 /// /// 标识 public void Unlock(LockIdType lckId) { lock (globalLck) mapLck[lckId] = false; } } }