Qt生产者消费者实验(1):信号量
来源:互联网 发布:数据库设计案例分析 编辑:程序博客网 时间:2024/06/17 15:07
/*生产者和消费者实验使用信号量实现线程的同步*/#include <QtCore>#include <iostream>const int DataSize = 100;const int BufferSize = 10;char buffer[BufferSize];//定义两个信号量QSemaphore freeSpace(BufferSize);QSemaphore usedSpace(0);//刚开始没有生产者写好的数据,所以初始化为0//生产者class Producer : public QThread{public: void run();};//start()调用的就是run()函数。他是一个虚函数,默认情况下调用exec()//从该函数返回表示线程已经结束//生产者随机生成一个字母填充进缓冲区buffervoid Producer::run(){ for (int i = 0; i < DataSize; ++i) { freeSpace.acquire();//获取“自由的”字节 buffer[i % BufferSize] = "ACGT"[uint(rand()) % 4]; std::cerr << "P"; usedSpace.release();//转换为“用过的”(填充过的)字节 }}//消费者class Consumer : public QThread{public: void run();};//将生产者填充进“用过的”字节的字幕读取并输出到控制台void Consumer::run(){ for (int i = 0; i < DataSize; ++i) { usedSpace.acquire();//获取“用过的”资源,如果没有则一直阻塞,直到有资源为止 //std::cerr << buffer[i % BufferSize]; char Cons = buffer[i % BufferSize]; std::cerr <<"c"; freeSpace.release(); } std::cerr << std::endl;}//主程序int main(){ Producer producer; Consumer consumer; producer.start();//通过调用run来执行线程 consumer.start(); producer.wait();//wait()和pthread_join()功能类似 consumer.wait(); return 0;}
执行结果:
BufferSize 不同对应的结果也稍有不同
(1)
const int DataSize = 100;
const int BufferSize = 1;
PcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPc
(2)
const int DataSize = 100;
const int BufferSize = 10;
PPPPPPPPPPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcPcccccccccc
(3)
const int DataSize = 100;
const int BufferSize = 100;
PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
- Qt生产者消费者实验(1):信号量
- Qt生产者消费者实验(1):信号量
- QT 中的生产者和消费者信号量
- Qt生产者消费者实验:等待条件QWaitCondition
- Qt生产者消费者实验:等待条件QWaitCondition
- 1,使用信号量解决生产者-消费者问题
- 生产者-消费者信号量问题
- Qt生产者消费者实验(2):等待条件QWaitCondition
- Qt生产者消费者实验(2):等待条件QWaitCondition
- Qt生产者消费者实验(2):等待条件QWaitCondition
- “生产者-消费者”实验
- 生产者消费者问题(信号量)
- 信号量实现生产者消费者问题
- 信号量解决生产者,消费者问题
- 信号量与生产者消费者问题
- 生产者---消费者模型之信号量
- 信号量解决生产者-消费者问题
- 操作系统实验资料搜集:信号量,生产者消费者,读者写者等
- oracle 判断是否为数字
- poj2230欧拉回路+DFS
- hdu 2085 核反应堆
- 编译过程
- 【树形DP+背包】 hdu1011 Starship Troopers
- Qt生产者消费者实验(1):信号量
- 裸奔程序之外部中断检测按键
- 不同浏览器URL编码方式
- http协议简要
- poj 1659 Frogs' Neighborhood
- Makefile变量
- 求最小公倍数 初等数
- js数组操作大全(转)
- 判断一串字符中有多少个汉字