生产者消费者模型(Qt实现)

Qt实现生产者消费者模型

本文展示的是用Qt实现的生产者消费者模型。
该模型含有4个生产者,4个消费者,12个缓冲区。
当缓冲区放满产品时,生产者进程阻塞。
当缓冲区无产品时,消费者进程阻塞。
点击“Producer1”可以改变当前进程的状态。
点击“Pause"可以暂停所有进程,点击”Reset"可以恢复初始状态。
每一个生产者生产的物品有固定的颜色,以示区分。
右侧文本栏展示每一时刻各进程的运行/阻塞情况。
中央文本实时显示空余数量和已有物品数量。

初始界面
在这里插入图片描述
在这里插入图片描述
核心代码段

class Consumer : public QThread			//消费者进程
{
    Q_OBJECT

private:
    int n;	//阻塞/运行状态标志

public:
    void run()	//重写run函数
    {
        while(true)
        {
            if(n == 1 && full.tryAcquire())		//若P操作成功
            {
                empty.release();				//P(empty)
                emit consume();
                emit consumeBlock(false);
                consumerPosition = (consumerPosition + 1) % BufSize;	//修改当前位置
            }
            else
            {
                emit consumeBlock(true);	//否则,阻塞
            }
            Sleep(sleepTime);			//添加时间间隔,增强可视化效果
        }
    }

    void setCondition(int Button)		//设置当前状态
    {
        n=Button;
    }
signals:
    void consume();
    void consumeBlock(bool isBlocked);
};


class Producer : public QThread		//生产者进程
{
    Q_OBJECT

private:
    int n;			//阻塞/运行状态

public:
    void run()
    {
        while (true)
        {
            if(n == 1 && empty.tryAcquire())	//若P操作成功
            {
                full.release();		//V(empty)
                emit produce();
                emit produceBlock(false);
                producerPosition = (producerPosition + 1) % BufSize;	//修改当前位置
            }
            else
            {
                emit produceBlock(true);	//否则,阻塞
            }
            Sleep(sleepTime);	//添加时间间隔,增强可视化效果
        }
    }

    void setCondition(int Button)	//设置当前状态
    {
        n=Button;
    }
signals:
    void produce();
    void produceBlock(bool isBlocked);
};

资源下载地址
包括可执行程序和源代码

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值