【100题】第三十四 实现一个队列

一,题目:

       生产者消费者线程演示  
                  一个生产者线程将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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何给定两个gps坐标 算出航向角_机器人开发如何配置ROS中的TF变换关系?

当我们进行机器人开发时&#xff0c;常常需要面对TF坐标转换&#xff0c;本文以 Autolabor Pro1 与思岚激光雷达为例&#xff0c;介绍ROS TF的使用。Autolabor Pro1是什么&#xff1f;Autolabor Pro1是一款室内外通用机器人移动底盘。该平台上可集成激光雷达、摄像头、GPS等传感…

Tomcat架构与原理

Tomcat架构与原理 架构图 原理 ①、用户点击网页内容&#xff0c;请求被发送到本机端口8080&#xff0c;被在那里监听的Coyote HTTP/1.1 Connector获得。 ②、Connector把该请求交给它所在的Service的Engine来处理&#xff0c;并等待Engine的回应。 ③、Engine获得请求localhos…

c语言转换为python语言_python和c语言

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; c语言是编译型语言&#xff0c;经过编译后&#xff0c;生成机器码&#xff0c;然后再运行&#xff0c;执行速…

COJ1196(Staginner 去爬山)

题目大意&#xff1a;给定一个n*m的只含0和1的矩阵&#xff0c;从矩阵的最后一行中的某个1出发&#xff0c;每步只能走到相邻的且是1的格子中&#xff0c;求能达到的最大高度&#xff08;最小行数&#xff09;。 这题直接DFS即可&#xff0c;复杂度为O(N*M)。 View Code 1 #in…

python网站模板下载_Python画图模板大全:从此画图不用愁

1、matplotlib具体参数介绍&#xff1a; 在介绍Python画图模板之前&#xff0c;先买个和大家卖个官司&#xff0c;首先介绍一下Python画图常用库matplotlib的参数&#xff0c;如果只介绍模板&#xff0c;如果你想改一些参数&#xff0c;首先要知道各个参数的含义&#xff0c;那…

二进制安装mysql-5.7.26

一、上传二进制 mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz包 #/data 是数据盘 自己根据情况定 [rootVM_0_10_centos data]# pwd/datatar xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gzmv mysql-5.7.26-linux-glibc2.12-x86_64 mysql #做软连接 ln -s /data/mysql /usr/lo…

python给矩阵赋值_解决Python二维数组赋值问题

解决Python二维数组赋值问题 当我们采用s[[0]*3]*2初始化一个数组&#xff0c;然后对s[0][0]进行赋值&#xff0c;改变的是第一列所有的值。因为用s [[0]*3]*2 初始化数组&#xff0c;他表示的是指向这个列表的引用&#xff0c;所以当你修改一个值的时候&#xff0c;整个列表都…

python自增_python mysql自增字段AUTO_INCREMENT值的修改方式

在之前得文章中我们说过&#xff0c;如果使用delete对数据库中得表进行删除&#xff0c;那么只是把记录删除掉&#xff0c;并且id的值还会保持上次的状态。 即删除之前如果有四条数据&#xff0c;删除之后&#xff0c;再添加新的数据&#xff0c;id怎会从5开始。 但是我们显示想…

springboot security 权限不足_springBoot整合springSecurity(零一)

整体结构》》》1&#xff0c;springboot2.0整合springSecurity5.1.12&#xff0c;mysql--->>InnoDB3&#xff0c;持久层我用的是用MybatiysPlus(这里就不写关于这个的了,基本是查)4&#xff0c;web服务不是jar服务5&#xff0c;数据库表》账户表/角色表/权限表/账户角色关…

zabbix基础之环境搭建

zabbix入门 环境部署 安装mysql #安装MySQL&#xff0c;官方的MySQL的repo源地址&#xff1a;http://repo.mysql.com/ #选择指定的MySQL版本&#xff0c;我这里选mysql5.7的版本,复制对应版本的链接地址。 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch…

新版个人所得税计算python_最新个税计算 / 个税计算器 小程序 wepy 开发

根据最新税改后计算个人所得税的计算器。 如有其它疑惑&#xff0c;也欢迎提出任何修改意见。可以在主题下留言或者在小程序中点击联系在线客服或者加入qq群&#xff1a;869113926 1、扫一扫2、效果图这次开发遇到几个问题因此记录下来。 (1)、在开发微信小程序组件框架时&…

Google Analytics 搜索引擎来源

转载于:https://www.cnblogs.com/dabaopku/archive/2012/05/08/2490164.html

python 图片 变清晰_python实现图片变亮或者变暗的方法

python实现图片变亮或者变暗的方法 这篇文章主要介绍了python实现图片变亮或者变暗的方法,涉及Python中Image模块操作图片的相关技巧,分享给大家供大家参考。具体实现方法如下&#xff1a; import Image # open an image file (.jpg or.png) you have in the working folder im…

mysql存储过程中怎么睡几秒_MySql的逻辑架构

Mysql在互联网企业中应用非常广泛&#xff0c;互联网企业的特点访问量非常大&#xff0c;怎么样优化mysql就成了摆在我们面前的一道难题。我们从mysql的逻辑架构说起&#xff1a;最上面一层是客户端的连接服务&#xff0c;主要完成客户端的连接处理&#xff0c;授权认证。在该层…

createprocess失败代码2_DevOPS | 基于sonarqube、jenkins和gitlab的持续集成代码检查

在持续集成过程中&#xff0c;针对代码的静态检查一般有两个时间点&#xff1a;一是提交代码的时候、二是提交merge request的时候&#xff0c;如果代码检查不通过&#xff0c;则可以直接拒绝此次代码提交或者合并。下面我们介绍下在常见的devops工具链sonarqube、jenkins和git…

保存到本地_手把手教你将微信表情包保存到本地

筒子们晚上好&#xff01;微信不像QQ那样可以把微信包表情直接保存到本地&#xff0c;所以今天就来介绍两个把微信表情包保存到本地的方法&#xff01;(两种方法均需要用到电脑)方法一&#xff1a;使用微信公众号(不建议)工具&#xff1a;手机&#xff0c;电脑&#xff0c;微信…

redis集群 + 哨兵 + zookeeper_技术干货 | Redis的哨兵和集群

Redis全称REmote DIctionary Server&#xff0c;是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。它通常被称为数据结构服务器&#xff0c;因为值(value)可以是字符串(String), 哈希(…

foxitreadersdk 打开远程文件_一种最不为人知最简单最方便的用电脑操作手机上的文件...

(声明&#xff1a;此功能&#xff0c;只适用于安桌系统的手机)由于最近一年手机上的文件经常隔三差五地提示空间已满&#xff0c;我不得不经常痛心删除一些文件&#xff0c;或者将手机上的文件&#xff0c;移到电脑端。如果想通过QQ或者微信发送单个单个文件&#xff0c;总是不…

python dict遍历_Python 容器(二):字典(Dict)

Python 容器(二)&#xff1a;字典(Dict)一、字典1、定义&#xff1a;Python的字典数据类型是基于hash散列算法实现的&#xff0c;采用键值对(key:value)的形式&#xff0c;根据key的值计算value的地址&#xff0c;具有非常快的查取和插入速度。2、特点&#xff1a;1&#xff09…

奥特曼传奇英雄存档丢了怎么找回_热血传奇:道士最帅武器—玄天

点击“传奇私服玩家群”加个关注☀ 欢迎传奇老司机&#xff01;在这里&#xff0c;分享最新传奇资讯&#xff0c;回忆当年的传奇年代。分享最热传奇手游&#xff0c;端游&#xff0c;找回昔日组队的热血时光。记得加个关注不迷路~☀ 微信公众号&#xff1a;diyisf777热血传奇中…