PIP 5.6.1
Platform-Independent Primitives
Открытые члены | Полный список членов класса
Класс PIReadWriteLock

Примитив синхронизации, допускающий одновременных читателей и эксклюзивный доступ писателя. Подробнее...

#include <pireadwritelock.h>

Открытые члены

PIReadWriteLock PIReadWriteLock ()
 Создает PIReadWriteLock.
 
 ~PIReadWriteLock ()
 Деструктор PIReadWriteLock.
 
void lockWrite ()
 Захватывает доступ на запись, ожидая отсутствия активных читателей и писателя.
 
bool tryLockWrite ()
 Пытается захватить доступ на запись без ожидания.
 
bool tryLockWrite (PISystemTime timeout)
 Пытается захватить доступ на запись в пределах timeout.
 
void unlockWrite ()
 Освобождает доступ на запись и пробуждает ожидающие потоки.
 
void lockRead ()
 Захватывает одно место читателя, ожидая пока активен доступ на запись.
 
bool tryLockRead ()
 Пытается захватить доступ на чтение без ожидания.
 
bool tryLockRead (PISystemTime timeout)
 Пытается захватить доступ на чтение в пределах timeout.
 
void unlockRead ()
 Освобождает одно место читателя и пробуждает ожидающие потоки.
 

Подробное описание

Примитив синхронизации, допускающий одновременных читателей и эксклюзивный доступ писателя.

Блокировка чтения/записи

Краткий обзор

PIReadWriteLock предоставляет более сложную межпотоковую защиту критических секций кода. PIReadWriteLock разрешает только одному потоку изменять данные, в то время как читать данные могут одновременно несколько потоков. Содержит методы: lockWrite(), tryLockWrite(), unlockWrite(), lockRead(), tryLockRead() и unlockRead().

Для автоматической блокировки на чтение и запись используйте PIReadLocker и PIWriteLocker.

Использование

Когда один поток блокирует запись с помощью функции lockWrite(), все остальные потоки (чтение и запись) не смогут получить доступ к данным, пока этот поток не вызовет unlockWrite(). Таким образом, блокировка записи работает аналогично мьютексу.

С другой стороны, несколько потоков могут одновременно считывать данные. Другими словами, функция lockRead() увеличивает счетчик потоков чтения, а функция unlockRead() уменьшает. Но поток не может считывать данные, пока другой поток заблокирован для записи.