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 метод, блокируется до тех пор, пока эти потоки не выйдите из режима чтения. Если есть потоки, ожидающие перехода в режим записи, дополнительные потоки, которые пытаются перейти в режим чтения или обновляемый режим, блокируются до тех пор, пока все потоки, ожидающие перехода в режим записи, не истекло время ожидания или не перешло в режим записи, а затем не вышли из него.
Примечание
Если блокировка допускает рекурсию, поток, который перешел на блокировку в режиме записи, может рекурсивно перейти в режим записи, даже если другие потоки ожидают выхода в режим записи.