약 ReaderWriterLockSlim
에 대해 알아보십시오. 왜 ReaderWriterLockSlim
을 다른 잠금보다 더 잘 이해하려고하는지, 예를 들어 Monitor
과 같습니까?왜 ReaderWriterLockSlim을 사용합니까?
EnterWriteLock()
과 EnterReadLock()
의 차이점은 무엇입니까? EnterWriteLock()
은 잠길 확률이 EnterReadLock()
이상이라고 생각합니다. 하지만 난 그냥 쓰기가 필요할 때 EnterReadLock()
을 사용할 수 있다고 가정합니다. 단지 느릴 것입니다.
class Program
{
static ReaderWriterLockSlim _rw = new ReaderWriterLockSlim();
static List<int> _items = new List<int>();
static Random _random = new Random();
static void Main(string[] args)
{
new Thread(read).Start() ;
new Thread(read).Start();
new Thread(read).Start();
new Thread(()=>write("A")).Start();
new Thread(() => write("B")).Start();
}
public static void read()
{
while (true)
{
//_rw.EnterReadLock();
_rw.EnterWriteLock();
for (int i = 0; i < _items.Count; i++)
{
Thread.Sleep(1000);
}
//_rw.ExitReadLock();
_rw.ExitWriteLock();
}
}
public static void write(string value)
{
while (true)
{
int newNumber = GetRandom(100);
_rw.EnterWriteLock();
_items.Add(newNumber);
_rw.ExitWriteLock();
Console.WriteLine("ThreadID={0} added={1}",Thread.CurrentThread.ManagedThreadId,newNumber);
Thread.Sleep(100);
}
}
private static int GetRandom(int v)
{
lock (_random)
{
return _random.Next(v);
}
}
}
RWLS와 관련된 일련의 모니터를 얻으려면 많은 코드를 작성해야합니다. 글을 쓰고 싶지는 않습니다. 테스트를 해보는 데는 기쁨이 없으며 100 % 확신하지 못하는 것이 옳습니다. –