ReaderWriterLockSlim
По умолчанию рекурсия запрещена: запись при уже держащемся чтении бросает LockRecursionException.
Синтаксис
var rw = new ReaderWriterLockSlim();
Пример
Давайте войдем в режим чтения:
using System;
using System.Threading;
class Program
{
static void Main()
{
var rw = new ReaderWriterLockSlim();
rw.EnterReadLock();
Console.WriteLine(rw.IsReadLockHeld);
rw.ExitReadLock();
}
}
Результат выполнения кода:
True
Пример
Давайте войдем в режим записи:
using System;
using System.Threading;
class Program
{
static void Main()
{
var rw = new ReaderWriterLockSlim();
rw.EnterWriteLock();
Console.WriteLine(rw.IsWriteLockHeld);
rw.ExitWriteLock();
}
}
Результат выполнения кода:
True
Пример
Давайте запросим запись при уже держащемся чтении:
using System;
using System.Threading;
class Program
{
static void Main()
{
var rw = new ReaderWriterLockSlim();
rw.EnterReadLock();
try
{
rw.EnterWriteLock();
Console.WriteLine("ok");
}
catch (LockRecursionException)
{
Console.WriteLine("fail");
}
rw.ExitReadLock();
}
}
Результат выполнения кода:
"fail"
Смотрите также
-
SemaphoreSlim,
семафор -
Lock,
Lock -
Monitor,
Monitor -
Mutex,
межпроцессный Mutex