QReadLocker Class

The QReadLocker class is a convenience class that simplifies locking and unlocking read-write locks for read access. More...

Header: #include <QReadLocker>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Note: All functions in this class are thread-safe.

Public Functions

QReadLocker(QReadWriteLock *lock)
~QReadLocker()
QReadWriteLock *readWriteLock() const
void relock()
void unlock()

Detailed Description

The purpose of QReadLocker (and QWriteLocker) is to simplify QReadWriteLock locking and unlocking. Locking and unlocking statements or in exception handling code is error-prone and difficult to debug. QReadLocker can be used in such situations to ensure that the state of the lock is always well-defined.

Here's an example that uses QReadLocker to lock and unlock a read-write lock for reading:

 QReadWriteLock lock;

 QByteArray readData()
 {
     QReadLocker locker(&lock);
     ...
     return data;
 }

It is equivalent to the following code:

 QReadWriteLock lock;

 QByteArray readData()
 {
     lock.lockForRead();
     ...
     lock.unlock();
     return data;
 }

The QMutexLocker documentation shows examples where the use of a locker object greatly simplifies programming.

See also QWriteLocker and QReadWriteLock.

Member Function Documentation

QReadLocker::QReadLocker(QReadWriteLock *lock)

Constructs a QReadLocker and locks lock for reading. The lock will be unlocked when the QReadLocker is destroyed. If lock is zero, QReadLocker does nothing.

See also QReadWriteLock::lockForRead().

[noexcept] QReadLocker::~QReadLocker()

Destroys the QReadLocker and unlocks the lock that was passed to the constructor.

See also QReadWriteLock::unlock().

QReadWriteLock *QReadLocker::readWriteLock() const

Returns a pointer to the read-write lock that was passed to the constructor.

void QReadLocker::relock()

Relocks an unlocked lock.

See also unlock().

void QReadLocker::unlock()

Unlocks the lock associated with this locker.

See also QReadWriteLock::unlock().