ReaderWriterLockSlim.EnterReadLock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Пытается выполнить вход в блокировку в режиме чтения.
public:
void EnterReadLock();
public void EnterReadLock ();
member this.EnterReadLock : unit -> unit
Public Sub EnterReadLock ()
Исключения
Свойство RecursionPolicy имеет значение NoRecursion, и текущий поток попытался получить блокировку чтения, когда уже удерживает эту блокировку чтения.
-или-
Свойство RecursionPolicy имеет значение NoRecursion, и текущий поток попытался получить блокировку записи, когда уже удерживает эту блокировку записи.
-или-
Глубина рекурсии превышает емкость счетчика. Данное ограничение настолько велико, что приложения никогда не должны столкнуться с этим исключением.
Объект ReaderWriterLockSlim был удален.
Примеры
В следующем примере показано, как использовать EnterReadLock метод для ввода блокировки в режиме чтения. Метод, показанный в примере, извлекает значение, связанное с ключом. Если ключ не найден, исключение, создаваемое внутренним Dictionary<TKey,TValue> элементом, может завершить метод . Блок finally
используется для выполнения ExitReadLock метода , гарантируя, что вызывающий объект выходит из режима чтения.
Этот код является частью более крупного примера, предоставленного 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 string Read(int key)
{
cacheLock.EnterReadLock();
try
{
return innerCache[key];
}
finally
{
cacheLock.ExitReadLock();
}
}
Public Function Read(ByVal key As Integer) As String
cacheLock.EnterReadLock()
Try
Return innerCache(key)
Finally
cacheLock.ExitReadLock()
End Try
End Function
Комментарии
Этот метод блокируется до тех пор, пока вызывающий поток не войдет в блокировку, и поэтому может никогда не вернуться. TryEnterReadLock Используйте метод , чтобы заблокировать для указанного интервала, а затем возвращайте, если вызывающий поток не вошел в режим чтения в течение этого интервала.
Несколько потоков могут одновременно переходить в режим чтения.
Если один или несколько потоков ожидают выхода в режим записи, поток, вызывающий EnterReadLock метод, блокирует время ожидания этих потоков или не перейдет в режим записи, а затем не выйдет из него.
Примечание
Если блокировка допускает рекурсию, поток, который вступил в блокировку в режиме чтения, может перейти в режим чтения рекурсивно, даже если другие потоки ожидают выхода в режим записи.
Не более одного потока может находиться в обновляемом режиме, а другие — в режиме чтения. Если дополнительные потоки ожидают перехода в обновляемый режим и нет потоков, ожидающих перехода в режим записи, потоки, вызывающие EnterReadLock метод, немедленно переходят в режим чтения и не блокируются.