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