это код:
class program
{
static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();
static void Main(string[] args)
{
for (int i = 0; i < 2; i++)
{
Task.Factory.StartNew(Read);
}
for (int i = 0; i < 1; i++)
{
Task.Factory.StartNew(Write);
}
Console.Read();
}
static void Read()
{
while (true)
{
rwLock.EnterReadLock();;
Thread.Sleep(100);
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} reading");
rwLock.ExitReadLock();
}
}
static void Write()
{
while (true)
{
rwLock.EnterWriteLock();
Thread.Sleep(3000);
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} writing");
rwLock.ExitWriteLock();
}
}
}
Я хочу протестировать ReaderWriterLockSlim, результат, который я ожидаю, поочередно читается и записывается в консоли, но, наконец, запись только в консоли.
Здесь результат:
5 reading 2020/2/17 18:24:36
4 reading 2020/2/17 18:24:36
3 reading 2020/2/17 18:24:36
6 writing 2020/2/17 18:24:39
6 writing 2020/2/17 18:24:42
6 writing 2020/2/17 18:24:45
6 writing 2020/2/17 18:24:48
6 writing 2020/2/17 18:24:51
6 writing 2020/2/17 18:24:54
6 writing 2020/2/17 18:24:57
6 writing 2020/2/17 18:25:00
6 writing 2020/2/17 18:25:03
6 writing 2020/2/17 18:25:06
, но при использовании ReaderWriterLock, его альтернативное отображение. Вот результат:
4 reading 2020/2/17 18:30:22
3 reading 2020/2/17 18:30:22
5 reading 2020/2/17 18:30:22
6 writing 2020/2/17 18:30:25
4 reading 2020/2/17 18:30:25
3 reading 2020/2/17 18:30:25
5 reading 2020/2/17 18:30:25
6 writing 2020/2/17 18:30:28
4 reading 2020/2/17 18:30:29
5 reading 2020/2/17 18:30:29
3 reading 2020/2/17 18:30:29
6 writing 2020/2/17 18:30:32
4 reading 2020/2/17 18:30:32
5 reading 2020/2/17 18:30:32
3 reading 2020/2/17 18:30:32
6 writing 2020/2/17 18:30:35
5 reading 2020/2/17 18:30:35
3 reading 2020/2/17 18:30:35
4 reading 2020/2/17 18:30:35
6 writing 2020/2/17 18:30:38
5 reading 2020/2/17 18:30:45
3 reading 2020/2/17 18:30:45
4 reading 2020/2/17 18:30:45
Почему это происходит, кто-то подскажет мне причину этого явления? Надеюсь ответить