Spec-Zone .ru
спецификации, руководства, описания, API
|
public interface ReadWriteLock
locks
, один для операций только для чтения и один для того, чтобы записать. read lock
может быть сохранен одновременно многократными потоками читателя, пока нет никаких писателей. write lock
является монопольным. Все реализации ReadWriteLock должны гарантировать что эффекты синхронизации памяти операций writeLock (как определено в Lock
интерфейс), также содержат относительно связанного readLock. Таким образом, поток, успешно получающий блокировку чтения, будет видеть все обновления, сделанные после предыдущего выпуска блокировки записи.
Блокировка чтения-записи учитывает больший уровень параллелизма в доступе к совместно используемым данным чем разрешенное блокировкой взаимного исключения. Это использует факт, что, в то время как только единственный поток за один раз (поток писателя) может изменить совместно используемые данные, во многих случаях любое число потоков может одновременно считать данные (следовательно потоки читателя). В теории увеличение параллелизма, разрешенного при помощи блокировки чтения-записи, приведет к улучшениям производительности по сравнению с использованием блокировки взаимного исключения. Практически это увеличение параллелизма будет только полностью понято на многопроцессорной системе, и затем только если схемы доступа для совместно используемых данных являются подходящими.
Улучшится ли блокировка чтения-записи, производительность по использованию блокировки взаимного исключения зависит от частоты, что данные читаются по сравнению с тем, чтобы быть измененным, продолжительностью операций чтения и операций записи, и конкуренции для данных - то есть, число потоков, которые попытаются считать или записать данные одновременно. Например, набор, который первоначально заполняется с данными и после того нечасто изменяется, часто ищась (такие как каталог некоторого вида) является идеальным кандидатом на использование блокировки чтения-записи. Однако, если обновления становятся частыми тогда, данные проводят большую часть своего исключительно заблокированного времени и есть немного, если любое увеличение параллелизма. Далее, если операции чтения слишком коротки издержки реализации блокировки чтения-записи (который по сути более сложен чем блокировка взаимного исключения), может доминировать над стоимостью выполнения, особенно так много реализаций блокировки чтения-записи все еще сериализируют все потоки через маленький раздел кода. В конечном счете только профилирование и измерение установит, является ли использование блокировки чтения-записи подходящим для Вашего приложения.
Хотя основная работа блокировки чтения-записи является прямой, есть много стратегических решений, которые должна сделать реализация, который может влиять на эффективность чтения-записи, привязывают данное приложение. Примеры этих политик включают:
ReentrantReadWriteLock
, Lock
, ReentrantLock
Модификатор и Тип | Метод и Описание |
---|---|
Блокировка |
readLock()
Возвращает блокировку, используемую для того, чтобы читать.
|
Блокировка |
writeLock()
Возвращает блокировку, используемую для того, чтобы записать.
|
Lock readLock()
Lock writeLock()
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.