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

手机微信客户端网站建设临邑网页设计

手机微信客户端网站建设,临邑网页设计,黄埔做网站的公司,网站seo去哪个网站找好在 Qt 中&#xff0c;信号量&#xff08;QSemaphore&#xff09;是一种用于控制对共享资源访问的同步工具。它允许一定数量的线程同时访问共享资源&#xff0c;适合用于生产者-消费者模型。 代码实现 #include <QCoreApplication> #include <QThread> #include &…

在 Qt 中,信号量(QSemaphore)是一种用于控制对共享资源访问的同步工具。它允许一定数量的线程同时访问共享资源,适合用于生产者-消费者模型。

代码实现

#include <QCoreApplication>
#include <QThread>
#include <QSemaphore>
#include <QDebug>
#include <QQueue>
#include <QMutex>const int BUFFER_SIZE = 5;QQueue<int> buffer; // 共享缓冲区
QSemaphore freeSpace(BUFFER_SIZE); // 空闲空间信号量
QSemaphore usedSpace(0); // 已使用空间信号量
QMutex mutex; // 保护缓冲区的互斥锁// 生产者线程
class Producer : public QThread {
protected:void run() override {for (int i = 0; i < 10; ++i) {freeSpace.acquire(); // 等待空闲空间mutex.lock();buffer.enqueue(i);qDebug() << "Produced:" << i;mutex.unlock();usedSpace.release(); // 增加已使用空间QThread::msleep(100); // 模拟生产耗时}}
};// 消费者线程
class Consumer : public QThread {
protected:void run() override {for (int i = 0; i < 10; ++i) {usedSpace.acquire(); // 等待已使用空间mutex.lock();int value = buffer.dequeue();qDebug() << "Consumed:" << value;mutex.unlock();freeSpace.release(); // 增加空闲空间QThread::msleep(200); // 模拟消费耗时}}
};int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);Producer producer;Consumer consumer;producer.start();consumer.start();producer.wait();consumer.wait();return app.exec();
}

代码说明

1、共享资源:

buffer 是一个共享的队列,用于存储生产者生成的数据。

2、信号量:

freeSpace:表示缓冲区中的空闲空间数量,初始值为 BUFFER_SIZE。
usedSpace:表示缓冲区中已使用的空间数量,初始值为 0。

3、互斥锁:

mutex 用于保护对 buffer 的访问,确保生产者和消费者不会同时操作缓冲区。

4、生产者线程:

调用 freeSpace.acquire() 等待空闲空间。
使用 mutex.lock() 保护缓冲区,将数据放入缓冲区。
调用 usedSpace.release() 增加已使用空间。

5、消费者线程:

调用 usedSpace.acquire() 等待已使用空间。
使用 mutex.lock() 保护缓冲区,从缓冲区取出数据。
调用 freeSpace.release() 增加空闲空间。

为什么必须使用两个信号量?

1、精准控制两种状态:

freeSpace 确保生产者在缓冲区未满时才能生产。
usedSpace 确保消费者在缓冲区非空时才能消费。

2、避免竞争条件:

生产者和消费者通过不同的信号量等待和通知,避免因共享单一信号量导致的条件误判。

为什么不能只用一个 QSemaphore?

1、同步问题:

生产者需要等待缓冲区有空闲空间才能生产数据。
消费者需要等待缓冲区有数据才能消费数据。
如果只用一个 QSemaphore,无法同时满足这两个条件。

2、线程安全问题:

如果生产者请求资源(减少信号量),消费者释放资源(增加信号量),可能会导致信号量的值不符合实际缓冲区状态。
例如,生产者可能在缓冲区已满时继续生产,消费者可能在缓冲区为空时继续消费,导致数据不一致。

3、无法区分状态:

一个 QSemaphore 只能表示一种状态(如空闲空间或已使用空间),无法同时表示两种状态。


文章转载自:

http://w2TilSqN.skbhL.cn
http://BhJuKUf2.skbhL.cn
http://8Ynb9Hzy.skbhL.cn
http://Tb46vurE.skbhL.cn
http://svs29sNw.skbhL.cn
http://85XOpdgi.skbhL.cn
http://imTeh63C.skbhL.cn
http://3l58TsSE.skbhL.cn
http://QDy2Vysj.skbhL.cn
http://S6EwfPHX.skbhL.cn
http://QXa7ssa1.skbhL.cn
http://pjNdDoWx.skbhL.cn
http://vp4SdbSu.skbhL.cn
http://5KModL2H.skbhL.cn
http://l5MFItl6.skbhL.cn
http://9Xmjf7aG.skbhL.cn
http://izh884ha.skbhL.cn
http://PVV3wX8n.skbhL.cn
http://lGYCLOXF.skbhL.cn
http://RcN4iQRL.skbhL.cn
http://VyyhorAA.skbhL.cn
http://mw0m4wbV.skbhL.cn
http://0NITL58k.skbhL.cn
http://X9PrjtMi.skbhL.cn
http://qmuzWMSr.skbhL.cn
http://Fz4vP30G.skbhL.cn
http://7clk6S9L.skbhL.cn
http://VkVrxeNw.skbhL.cn
http://LbuXigLw.skbhL.cn
http://1tXmMX5c.skbhL.cn
http://www.dtcms.com/wzjs/688174.html

相关文章:

  • 怎样把已经有的网站做推广一种子网站做的很好的视频广告
  • 商标设计在线生成器西安网站优化效果
  • 网站开发怎么报价建设网站包维护
  • 专注徐州网站开发书签制作方法图片大全
  • 网站建设首先要网站验证码目录
  • 新泰网站设计软件项目管理案例分析
  • 重庆网站建设安全营销型网站模版
  • 网站建设与维护大学生总结新网站怎么做seo
  • 北京外包公司 网站开发2013深圳网站设计公司排名
  • 郑州网站建设哪家便宜中山百度推广公司
  • 济南手机网站建设公司排名单页网站的营销
  • 广西壮族自治区市场监督管理局官网网站推广优化招聘
  • 在线视频网站开发方案php施工企业安全生产评价汇总表最终须由( )签名。
  • 综合门户型网站有哪些凉山州建设局网站
  • win2008 iis网站发布为什么备案关闭网站
  • 网站所有者查询网站流量怎么做乡1万
  • hao123网站模板长沙网站制作与设计
  • 中英文切换网站怎么做企业网站建设营销优化方案
  • 长沙优化网站技术厂家360浏览器建设银行网站
  • 工程建设室内涂料招投标网站做网站 简单外包
  • php网站开发外包营销策划与运营方案
  • 网站源码哪个好网站上的qq咨询怎么做
  • 制作个简单公司网站要多少钱社区建立网站
  • 用什么程序做视频网站如何为自己公司做网站
  • 电子网站建设策划模板asp网站安全吗
  • 中国制造网外贸网站深圳东门属于哪个区
  • 石嘴山网站定制开发建设销售平台排行榜前十名
  • 怎么看网站是不是用凡客做的精品网站建设费用磐石网络
  • 有没有做网站一次付费十堰网站建设价格
  • 网站建设内页六安人论坛百姓杂谈