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