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;
}
}
}