【发布时间】:2017-12-08 21:37:22
【问题描述】:
了解ReaderWriterLockSlim。试图理解为什么ReaderWriterLockSlim 比任何其他锁(例如Monitor)更好?
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% 确定你做对了,这并不快乐。
标签: c# multithreading