ReaderWriterLockSlim.EnterWriteLock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пытается ввести блокировку в режиме записи.
public:
void EnterWriteLock();
public void EnterWriteLock();
member this.EnterWriteLock : unit -> unit
Public Sub EnterWriteLock ()
Исключения
Свойство RecursionPolicy имеет значение NoRecursion , и текущий поток уже ввел блокировку в любом режиме.
–или–
Текущий поток вступил в режим чтения и еще не владеет блокировкой записи, поэтому попытка ввести блокировку в режиме записи создаст возможность взаимоблокировки.
–или–
Число рекурсии превысит емкость счетчика. Ограничение настолько велико, что приложения никогда не должны столкнуться с ним.
Объект ReaderWriterLockSlim удален.
Примеры
В следующем примере показано, как использовать EnterWriteLock метод для ввода блокировки в режиме записи. Метод, показанный в примере, добавляет новую пару "ключ-значение" в синхронизированный кэш. Если ключ уже находится в кэше, исключение, вызываемое внутренним Dictionary<TKey,TValue> , разрешено завершить метод. Блок finally используется для выполнения метода, гарантируя, что вызывающий ExitWriteLock объект выходит из режима записи.
Этот код является частью более крупного примера, предоставленного ReaderWriterLockSlim для класса.
private ReaderWriterLockSlim cacheLock = new ReaderWriterLockSlim();
private Dictionary<int, string> innerCache = new Dictionary<int, string>();
Private cacheLock As New ReaderWriterLockSlim()
Private innerCache As New Dictionary(Of Integer, String)
public void Add(int key, string value)
{
cacheLock.EnterWriteLock();
try
{
innerCache.Add(key, value);
}
finally
{
cacheLock.ExitWriteLock();
}
}
Public Sub Add(ByVal key As Integer, ByVal value As String)
cacheLock.EnterWriteLock()
Try
innerCache.Add(key, value)
Finally
cacheLock.ExitWriteLock()
End Try
End Sub
Комментарии
Этот метод блокирует до тех пор, пока вызывающий поток не войдет в блокировку, и поэтому никогда не возвращается. TryEnterWriteLock Используйте метод, чтобы блокировать указанный интервал, а затем возвращать, если вызывающий поток не ввел режим записи в течение этого интервала.
Если другие потоки ввели блокировку в режиме чтения, поток, вызывающий EnterWriteLock блоки метода, пока эти потоки не вышли из режима чтения. Если есть потоки, ожидающие ввода режима записи, дополнительные потоки, которые пытаются войти в режим чтения или блок режима обновления, пока все потоки, ожидающие ввода режима записи, либо истекли или вошли в режим записи, а затем вышли из него.
Note
Если блокировка разрешает рекурсию, поток, введенный в режим записи, может входить в режим записи рекурсивно, даже если другие потоки ожидают ввода режима записи.