QT——QReadWriteLock

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()
 {
     lock.lockForRead(); 
      
     lock.unlock(); 
     
 return  data;
 } 
用下面的方式就可以简化了:

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

你可能感兴趣的:(File,qt)