Блокировки чтения и записи
Обновлен: Ноябрь 2007
Класс ReaderWriterLockSlim разрешает одновременное чтение ресурса несколькими потоками, однако для записи в ресурс требуется блокировка взаимоисключающего доступа.
Класс ReaderWriterLockSlim следует использовать в приложении для обеспечения синхронизации доступа к общему ресурсу между потоками. Блокировки устанавливаются на сам объект ReaderWriterLockSlim.
Как в любом механизме синхронизации, необходимо убедиться, что потоки не обходят блокировку, предоставленную ReaderWriterLockSlim. Одним способом подобного обеспечения является разработка класса, который инкапсулирует общий ресурс. Этот класс должен предоставлять элементы, которые получают доступ к закрытому общему ресурсу и используют закрытый объект ReaderWriterLockSlim для синхронизации. Пример см. в примере кода для класса ReaderWriterLockSlim. ReaderWriterLockSlim достаточно эффективен для использования при синхронизации отдельных объектов.
Приложение должно быть создано так, чтобы уменьшить время операций чтения и записи. Длительные операции записи отрицательно сказываются на пропускной способности, поскольку блокировка записи является взаимоисключающей. Длительные операции чтения блокируют ожидающие средства записи, и если хотя бы один поток ожидает доступа для записи, потоки, запросившие доступ для чтения, также будут заблокированы.
Примечание. |
---|
.NET Framework содержит две блокировки чтения и записи, ReaderWriterLockSlim и ReaderWriterLock. ReaderWriterLockSlim рекомендуется для всех новых разработок. ReaderWriterLockSlim аналогична ReaderWriterLock, однако имеет более упрощенные правила рекурсии и обновления или снижения состояния блокировки. ReaderWriterLockSlim избегает множества случаев возникновения возможных взаимоблокировок. Кроме того, производительность ReaderWriterLockSlim гораздо лучше, чем производительность ReaderWriterLock. |