当前位置: 首页 > wzjs >正文

网站建设肆金手指排名9做网站备案都需要什么东西

网站建设肆金手指排名9,做网站备案都需要什么东西,汽车网站设计模板,网络推广专员百度百聘Qt 读写锁 QReadWriteLock 在基于互斥量QMutex的线程控制中,每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。若只是读取一个变量,是可以让多个线程同时访问的,在这种只读…

Qt 读写锁

QReadWriteLock

  在基于互斥量QMutex的线程控制中,每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程读取某个变量,使用互斥量时也必须排队。若只是读取一个变量,是可以让多个线程同时访问的,在这种只读的情况下,若仍然使用互斥量,就会降低程序的性能。

  QReadWriteLock的特点:

  • 读共享,写独占;
  • 默认写锁优先级高于读锁优先级;

  QReadWriteLock类的成员函数

函数名称函数功能
QReadWriteLock()构造读写锁对象
lockForRead()以只读方式锁定资源,如果有其他线程以写入方式锁定,该函数会阻塞
lockForWrite()以写入方式锁定资源,如果本线程或其他线程对读或写模式锁定资源,该函数就阻塞
unlock()解读锁或解写锁
tryLockForRead()lockForRead()的非阻塞版本。尝试请求读锁,可以设置超时时间
tryLockForWrite()lockForWrite()的非阻塞版本。尝试请求写锁,可以设置超时时间

程序示例

一个线程写值,多个线程读取值的场景

// 公共数据和读写锁
class TestData
{
public:static int sm_nSharedNumber;static QReadWriteLock sm_ReadWriteLock;
};int TestData::sm_nSharedNumber = 10;
QReadWriteLock TestData::sm_ReadWriteLock;// 读取数据的线程类
class WorkThreadA : public QThread
{Q_OBJECT
public:explicit WorkThreadA(QObject *parent = nullptr);~WorkThreadA() = default;protected:void run() override;
};WorkThreadA::WorkThreadA(QObject *parent) : QThread(parent)
{}void WorkThreadA::run()
{TestData::sm_ReadWriteLock.lockForRead();qDebug() << QString::fromLocal8Bit("read1 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;msleep(10);qDebug() << QString::fromLocal8Bit("read2 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;msleep(20);qDebug() << QString::fromLocal8Bit("read3 ----- 线程1 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;TestData::sm_ReadWriteLock.unlock();
}// 写入数据的线程类
class WorkThreadB : public QThread
{Q_OBJECT
public:explicit WorkThreadB(QObject *parent = nullptr);~WorkThreadB() = default;protected:void run() override;};WorkThreadB::WorkThreadB(QObject *parent) : QThread(parent)
{}void WorkThreadB::run()
{TestData::sm_ReadWriteLock.lockForWrite();TestData::sm_nSharedNumber += 5;TestData::sm_nSharedNumber *= 10;qDebug() << QString::fromLocal8Bit("write1 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;qDebug() << QString::fromLocal8Bit("write2 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;qDebug() << QString::fromLocal8Bit("write3 ----- 线程2 ID:") << QThread::currentThreadId() << "Result = " << TestData::sm_nSharedNumber;TestData::sm_ReadWriteLock.unlock();
}// 测试函数
void Test()
{// 创建了三个读取数据线程的对象unique_ptr<WorkThreadA> upThreadA1 = std::make_unique<WorkThreadA>();unique_ptr<WorkThreadA> upThreadA2 = std::make_unique<WorkThreadA>();unique_ptr<WorkThreadA> upThreadA3 = std::make_unique<WorkThreadA>();// 一个写入数据线程对象unique_ptr<WorkThreadB> upThreadB = std::make_unique<WorkThreadB>();upThreadA1->start();upThreadB->start();upThreadA2->start();upThreadA3->start();upThreadA1->wait();upThreadA2->wait();upThreadA3->wait();upThreadB->wait();
}
http://www.dtcms.com/wzjs/806131.html

相关文章:

  • 姜堰网站定制数字营销的概念
  • 滴滴优惠券网站怎么做的响应式网站和普通网站
  • 网站备案及管理的授权书广安做网站的公司
  • 费县住房和城乡建设局网站深圳网站建设外包公司
  • 宇舶手表网站电子商务网站建设及其相关法律问题
  • 上海做网站建设公司排名手机网站建站工作室
  • 重庆建设工程造价管理协会网站wordpress 知名网站
  • 广东省城乡住房建设厅网站首页试用型网站怎么做
  • wordpress网站源码分享织梦dedecms电影网站模板
  • 自己做网站传视屏做扎染的网站
  • 厦门市建设厅网站wordpress+高性能
  • 网站建设 网站内容 采集中国企业500强排名一览表
  • 网站开发语言php5.1wordpress 下载弹出插件
  • 达州网站建设哪家好德州品牌策划公司
  • 建外文网站淘宝客推广
  • 网站流量消耗计算php网站开发实践
  • 交互设计产品有哪些东莞做网站优化天助网络
  • 网站开发老是弹广告app定制开发制作
  • 平潭建设局网站手机下载视频网站模板下载失败
  • 网站建设设计稿哪里有网站模板下载
  • 成立一个网站平台要多少钱“哈尔滨企业服务平台”公众号
  • 新乡网站建设联系方式做网站用什么字体
  • 建网站 外贸网页制作英文
  • 互联网金融p2p网站建设手机网站开发视频
  • 王建设医生个人网站西安网易网站建设
  • 北京做网站比较大的公司现在建设公司网站用什么软件
  • 视频上传网站如何做制作软件网站
  • 做企业营销网站phpwind 做的网站
  • 银川建设厅网站重庆市建设工程管理协会网站
  • wordpress主题主页面保定网站优化招聘