QReadWriteLock读写锁的一点测试(它是逻辑锁,并没有与实物相联系),只有锁住了读,才允许再次读,否则一概不允许

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QReadWriteLock读写锁的一点测试(它是逻辑锁,并没有与实物相联系),只有锁住了读,才允许再次读,否则一概不允许相关的知识,希望对你有一定的参考价值。

QReadWriteLock m_lock;

void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111和222都可以顺利执行(第一个是锁住了进行读,第二个还是读数据,所以放行)

void MyWidget::Button1()
{
m_lock.lockForRead();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(因为之前已经被锁住了,相当于正在读数据,所以想写入内容的话,不行)

void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForRead();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个想读,当然没法进入)

void MyWidget::Button1()
{
m_lock.lockForWrite();
ShowMessage(tr("111"));
m_lock.lockForWrite();
ShowMessage(tr("222"));
}
此时,111可以执行,222不能执行(第一个正在写,第二个也想写,当然没法进入)

以上是关于QReadWriteLock读写锁的一点测试(它是逻辑锁,并没有与实物相联系),只有锁住了读,才允许再次读,否则一概不允许的主要内容,如果未能解决你的问题,请参考以下文章

golang读写锁与互斥锁的性能比较

ZooKeeper实现读写锁

锁-概念:可重入锁可中断锁公平锁读写锁

Qt系列文章之三十二 (基于QThread的QReadWriteLock和QWaitCondition 的线程同步)

Qt系列文章之三十二 (基于QThread的QReadWriteLock和QWaitCondition 的线程同步)

源码分析:升级版的读写锁 StampedLock