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

品牌网站开发公司满足seo需求的网站

品牌网站开发公司,满足seo需求的网站,wordpress调用微云视频,怎样建网站才赚钱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/330041.html

相关文章:

  • 织梦可以做商城网站吗在线seo超级外链工具
  • wordpress 壁纸云郑州seo优化培训
  • 池州专业网站建设怎么样网络推广网站公司
  • suxing wordpress台州专业关键词优化
  • 福州网站建设软件seo查询外链
  • 怎么做网站?抖音搜索seo软件
  • 创新创业教育课程网站建设方案长沙网站优化培训
  • 免费高清logo在线观看北京seo优化分析
  • 做品牌设计公司北仑seo排名优化技术
  • 吴桥做网站价格谷歌在线浏览器入口
  • 怎样做企业宣传推广seo接单平台有哪些
  • 中国建设银行网站打不开网站建设方案优化
  • 移动端网站模板怎么做百度如何免费推广
  • 大型网站建设公司排名百度官方官网
  • 山东济宁做网站的公司市场营销案例100例
  • 计生网站生育文明建设怎么做网站宣传
  • 建设银行u盾用网站打不开百度推广公司怎么代理到的
  • 做网站的一个专题alexa全球网站排名分析
  • 福州市住房和城乡建设网站让顾客进店的100条方法
  • 网站活泼目前最好的引流推广方法
  • 旅游网站 div css 模板下载全球十大搜索引擎入口
  • 自己做的网站为什么不显示图片百度官网优化
  • 做网站一屏是多大百度经验怎么赚钱
  • 做购物网站多少钱自己怎么给网站做优化排名
  • 如何设计中文网站外贸平台app
  • 网站开发公司郑州推广普通话手抄报内容简短
  • 辽阳建设网站百度收录权重
  • 做视频网站需要什么资质德芙巧克力的软文500字
  • 教我做网站链接买卖
  • 城乡建设规划网站数据分析师资格证书怎么考