PIP 5.5.3
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() уменьшает. Но поток не может считывать данные, пока другой поток заблокирован для записи.