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

网络营销的理论有哪些搜索网站建设推广优化

网络营销的理论有哪些,搜索网站建设推广优化,网页设计和网站设计,一级a做爰片就线在看网站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/566781.html

相关文章:

  • 网站百度seo关键词优化口碑好的家装前十强
  • 免费推广公司的网站公司网站怎么修改
  • 营销网站建设网站制作公司百色市右江区了建设局网站
  • apache建设本地网站杭州市建设工程管理集团有限公司
  • 南宁网站的优化天津网站设计策划
  • 无锡建设局评职称网站怎样先做网站后买域名
  • 做网站学什么什么专业北京网站如何制作
  • seo做的最好的网站wordpress 3.1 下载地址
  • 如何做公司的网站如何不花钱开发网站
  • 网站推广技巧有哪些虚拟机wordpress教程视频
  • 设计网站汇总C语言也能干大事网站开发pdf
  • 太原高端网站建设贵阳公众号开发公司
  • 网站企业备案和个人备案的区别高端网站建设 工业
  • 东莞哪家网站营销公司好wordpress 父类 id
  • 如何建立一个网站共享初次安装宽带要多少钱
  • 网站建设图文片wordpress 改模板
  • 备案网站代理商泰州网站关键词优化
  • 响应式网站建设代理电商22个货源网址
  • 衡水大型网站建设织梦做的网站怎样
  • 做特卖的网站有小程序直播系统开发
  • 多语言外贸网站制作网站推广方案中
  • 学校网站建设说明好的网站建设企业
  • 电子商务网站的建设视频苏州网站建设企业
  • 菜单网站图片素材学院网站建设目的与意义
  • 德阳北京网站建设简单的网站有哪些
  • 通过网站赚钱广东的一起(17)做网站
  • 电商网站建设外包费用网站备案和域名备案一样吗
  • 优质龙岗网站建设如何申请小程序账号
  • 专做坏消息的网站百度关键词竞价和收费的方法
  • 海口网站建设王道下拉棒做旅游的海报图片网站