Learning about ReaderWriterLockSlim
. Trying to understand why ReaderWriterLockSlim
in better than any other lock like for example Monitor
?
What is difference between EnterWriteLock()
and EnterReadLock()
. I suppose that EnterWriteLock()
has more chances to get lock than EnterReadLock()
. but I suppose I can use EnterReadLock()
in places when I need just write - it only will be slower.
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);
}
}
}