一,题目:

生产者消费者线程演示  
                  一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列

二,分析:

这一个,为操作系统上的一个经典例子,以下是july给出的解答

三,源码:

#include <windows.h> #include <stdio.h> #include <process.h> #include <iostream> #include <queue> using namespace std; HANDLE ghSemaphore; //信号量 const int gMax = 100; //生产(消费)总数 std::queue<int> q; //生产入队,消费出队 //生产者线程 unsigned int __stdcall producerThread(void* pParam) { int n = 0; while(++n <= gMax) { //生产 q.push(n); cout<<"produce"<<n<<endl; ReleaseSemaphore(ghSemaphore, 1,NULL); //增加信号量 Sleep(300);//生产间隔的时间,可以和消费间隔时间一起调节 } _endthread(); //生产结束 return 0; } //消费者线程 unsigned int __stdcall customerThread(void* pParam) { int n = gMax; while(n--) { WaitForSingleObject(ghSemaphore, 10000); //消费 q.pop(); cout<<"custom "<<q.front()<<endl; //小肥杨指出,原答案这句和上句搞错了顺序? Sleep(500);//消费间隔的时间,可以和生产间隔时间一起调节 } //消费结束 CloseHandle(ghSemaphore); cout<<"working end."<<endl; _endthread(); return 0; } void threadWorking() { ghSemaphore = CreateSemaphore(NULL, 0, gMax, NULL); //信号量来维护线程同步 cout<<"workingstart."<<endl; unsigned threadID; HANDLE handles[2]; handles[0] = (HANDLE)_beginthreadex( NULL, 0, producerThread, NULL, 0, &threadID); handles[1] = (HANDLE)_beginthreadex( NULL, 0, customerThread, NULL, 0, &threadID); WaitForMultipleObjects(2, handles, TRUE, INFINITE); } int main() { threadWorking(); getchar(); return 0; }

转载于:https://www.cnblogs.com/tianshuai11/archive/2012/04/22/2477163.html

【100题】第三十四 实现一个队列相关推荐

  1. 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)

    一,题目: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度;(3) ...

  2. c语言三级上机题库,2006年9月全国等级考试三级c语言上机题库(三十四)

    ★☆题目34(无忧id 73,102 素数题) 无忧id 102 题提供了求素数isPrime()函数 程序prog1.c的功能是:选出100以上1000之内所有个位数字与十位数字之和被10除所得余数 ...

  3. 【100题】第十四题(数组中找两个数使其和等于输入数)

    一,题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可.例如输入数组1. ...

  4. 机器学习100天(三十四):034 先验概率、条件概率

    <机器学习100天>完整目录:目录 机器学习100天,今天讲的是:先验概率.条件概率. 一.先验概率.条件概率 机器学习中,我们经常听到两个数学概念:先验概率.后验概率.抛开复杂数学公式不 ...

  5. 深度学习核心技术精讲100篇(三十四)-智能化搜索,旅行场景下的个性化营销平台揭秘

    前言 个性化投放的"无人驾驶"平台何以自动化支持上千个场景的千人千面投放?商家.运营.小二,我们如何做到极致赋能和提效?面对旅行场景下用户需求低频.行为稀疏,特别是在营销活动大促期 ...

  6. AUTOSAR从入门到精通100讲(三十四)-AUTOSAR的分层架构

    谈及AutoSar架构前,要稍微了解下AutoSar的背景知识. 汽车上控制器迅速地发展,逐渐出现同一供应商不同代别的产品无法相互移植和复用的现象,更别提不同的供应商的兼容性了.不同代别控制器无法复用 ...

  7. Linux必会100个命令(三十四)which,whereis,locate

    70.which which命令用于查找文件.它在环境变量$PATH设置的目录里查找符合条件的文件. 格式: which 文件名 例1:查找文件find 71.whereis whereis命令也用于 ...

  8. 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术:Direct3D渲染五步曲...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8223965 作者:毛星云(浅墨 ...

  9. 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术:Direct3D渲染五步曲

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8223965 作者:毛星云(浅墨 ...

最新文章

  1. phpmyadmin 批量导出多个数据库
  2. Arch Linux 安装记(安装到移动硬盘)
  3. vuetify table_vuex 封装设计全局可用的vuetify中的snackbar
  4. linux桌面发展方向,观点|Linux 桌面的发展之路!
  5. MATLAB使用教程(4)——悄悄滴上手项目
  6. 破解数据匮乏现状:纵向联邦学习场景下的逻辑回归(LR)
  7. ECharts插件的使用
  8. @value 静态变量_C语言基本知识:变量
  9. MySQL 8.0 新特性:哈希连接(Hash Join)
  10. HIMSS 对EHR的定义
  11. 如何将成绩用C语言分,如何利用C语言实现简单的分数化简
  12. R语言manova函数稳健多元方差分析(Robust one-way MANOVA)、rrcov包中的wilks.test函数稳健单向MANOVA、vegan包的adonis函数非参数Manova等效
  13. Windows 10/11【家庭版】设置本地账户密码永不过期的方法
  14. IDL---批量波段合成(只要点击运行,自动化处理,解放生产力)
  15. 【转】很有哲理的句子,每天都值得看一遍
  16. 2015美国大学计算机科学专业排名,2015美国大学本科计算机专业排名前一百
  17. python中序列和列表区别细菌真菌病毒_生物信息中的Python 02 | 用biopython解析序列...
  18. chrome浏览器不支持video标签,不能自动播放。
  19. web字体库加载优化_优化Web字体以提高性能:最新技术
  20. 手推BN、IN、LN、GN

热门文章

  1. Java——线程锁,死锁,等待唤醒机制
  2. 方差,协方差 、统计学的基本概念
  3. Red Hat 8.0中设置光盘为软件源
  4. [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]
  5. ZJUT 地下迷宫 (高斯求期望)
  6. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:
  7. nodejs解析apk
  8. windows服务器下的ftp server搭建
  9. 网站决策分析软件WebBI
  10. 数据治理 主数据 元数据_我们对数据治理的误解