QMutex的局限性,我们可以使用
QReadWriteLock来操作,可以实现多个读,一个写,读之间可以不同步不互斥,写时会阻塞其他的写操作。
#include <QReadWriteLock>
- QReadWriteLock()
- QReadWriteLock( RecursionModerecursionMode )
- ~QReadWriteLock()
- void lockForRead ()
- void lockForWrite ()
- bool tryLockForRead ()
- bool tryLockForRead ( inttimeout )
- bool tryLockForWrite ()
- bool tryLockForWrite ( inttimeout )
- void unlock ()
例子:
QReadWriteLock lock; void ReaderThread::run() { lock.lockForRead(); read_file(); lock.unlock();
} void WriterThread::run() { lock.lockForWrite(); write_file(); lock.unlock(); }
enum QReadWriteLock::RecursionMode
Constant | Value | Description |
---|---|---|
QReadWriteLock::Recursive | 1 | 一个线程可对同一个互斥量加锁多次,并且只有对应的解锁才能释放一个互斥量 |
QReadWriteLock::NonRecursive | 0 | 一个线程只能 |
QReadLocker和QWriteLocker(简化QReadWriteLock)
这两个类来简化QReadWriteLock.
用下面的方式就可以简化了:
QReadWriteLock
lock
;
QByteArray readData()
{
QReadLocker locker(&lock);
return
data;
}
