说的风格的

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <queue>
#include <process.h>
using namespace std;
DWORD WINAPI Consumer(void*);//声明消费者函数
DWORD WINAPI Producer(void*);//声明生产者函数
#define N 10//定义缓冲区数量
/*数据结构的定义*/
struct MyData{  HANDLE m_S_Empty;// 生产者Semaphore
HANDLE m_S_Full; // 消费者Semaphore
HANDLE m_M_Mutex;//互斥信号量
queue<int> food; //定义共享缓冲区
bool  producerfinished;//标志着生产者是否结束生产
};
int j=0;//只是为了输出方便观察线程执行次数
int main()
{  /*对各个信号量赋值*/
MyData  mydata;//创建一个MyData数据类型的实体
mydata  mydata.m_M_Mutex = CreateMutex(NULL, false, NULL);//"false"表示刚刚创建的这个信号量不

属于®¨²任何线程
mydata.m_S_Empty = CreateSemaphore(NULL, N, N, NULL);//初始计数为N
mydata.m_S_Full = CreateSemaphore(NULL, 0, N, NULL);//初始计数为0 

mydata.producerfinished=false;//生产者结束标志刚开始设置为false,表示没有结束
/*创建生产者和消费者线程*/
HANDLE handles[2];
handles[0] = CreateThread(NULL,0,&Producer,(void*)&mydata,0,0);
handles[1] = CreateThread(NULL,0,&Consumer,(void*)&mydata,0,0);
WaitForMultipleObjects(2, handles, true, INFINITE); //等待两个线程都结束才往下执行
CloseHandle(mydata.m_M_Mutex);
CloseHandle(mydata.m_S_Full);
CloseHandle(mydata.m_S_Empty);
}
/*生产者函数*/
DWORD WINAPI Producer(void* lp)
{
MyData * md = (MyData*)lp;
for(int i =0  i < 100; i++){
WaitForSingleObject(md->m_S_Empty, INFINITE);//缓冲区有空间才可以往下
 WaitForSingleObject(md->m_M_Mutex, INFINITE);//消费者没有在操作缓冲区生产者才可以执行
 /*将所生产的物品放到指定的缓冲区中*/
md->food.push(1);
printf("%d\t生产1个物品,共有%d个物品\t\t%d\n",j++,md->food.size(),GetCurrentThreadId());//输

出缓冲区信息以及线程信息

ReleaseMutex(md->m_M_Mutex);//释放互斥信号量
  ReleaseSemaphore(md->m_S_Full, 1, NULL);//有物品的缓冲区增加一个
}
md->producerfinished=true;//若出了for循环,生产者结束生产,控制消费者线程结束
 return 0;
 }
 /*消费者函数*/
DWORD WINAPI Consumer(void* lp)
{
   MyData * md = (MyData*)lp;
 while(!md->producerfinished){//若生产者没有结束生产,可以继续往下执行     

WaitForSingleObject(md->m_S_Full,INFINITE);//若缓冲区没有空,则可以往下执行      

WaitForSingleObject(md->m_M_Mutex,INFINITE);//若生产者没有在操作缓冲区,则消费则可以操作
/*消费一个物品*/
 md->food.pop();
 printf("%d\t消费1个物品,共有%d个物品\t\t%d\n",j++,md->food.size(),GetCurrentThreadId());//

输出缓冲区信息以及线程信息
ReleaseMutex(md->m_M_Mutex); //释放互斥信号量
  ReleaseSemaphore(md->m_S_Empty,1,NULL);//空缓冲区增加一个
}
return 0;
} 
时间: 2024-08-25 16:46:20

说的风格的的相关文章

通过beego快速创建一个Restful风格API项目及API文档自动化(转)

通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界面. 一.创建数据库及数据表(MySQL) #db--jeedev -- ---------------------------- -- Table structure for `app` -- ---------------------------- DROP TABLE IF EXISTS `a

RESTful风格的Web服务框架:Swagger

Swagger与SpringMVC项目整合 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的资料,感觉目前最流行的莫过于Swagger了,功能强大,UI界面漂亮,并且支持在线测试等等,所以本人仔细研究了下Swagger的使用,下面就如何将Swagger与个人的SpringMVC项目进行整合做详细说明: 最终API管理界面:  详细步骤: Step1:项目中引入相关jar包: <properties> <project.build.sourceEncoding>UT

理解本真的REST架构风格

引子 在移动互联网.云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了.夸张点说,甚至“出了门都不好意思跟别人打招呼”.尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段.常常听到各种各样关于REST的说法,例如:有人说:“我们这套新的API决定不用Web Service(SOAP+WSDL),而是直接使用HTTP+JSON,也就是用RESTful的方式来开发.” 不用SOAP,甚至也不用

《变化中的资本主义:美国商业发展史》:教科书风格,一部美国政治经济历史书,三星推荐

整本书基本是一部用商业事件串起来美国政治经济史. 有教科书风格,叙事全面,但是整体风格略显枯燥. 翻译一般.个别语句段落不太通顺. 以下是书中一些重要信息的摘抄: 1:大约从1500年起,随着哥伦布的航海,就开启了帝国殖民化的进程.我们可以确切地将紧接其后的500年的世界历史定义为:欧洲扩张和影响力的稳步增长,无论好坏,其势力最终遍及全球.#207 2:不过从长远来看,并非是来自新世界的黄金和白银(从17世纪初,贵金属流入势头已大为减弱),而是新产品如靛蓝.可可.糖.奴隶和烟草等的大宗贸易,最为

[转] 使用Spring MVC构建REST风格WEB应用

原文地址:http://fancy888.iteye.com/blog/1629120 对于运行在网络上的MIS系统而言,处理数据的是整个系统的主要任务,翻开程序我们可以看到,80%以上的代码都在处理数据的CRUD操作.采用一种什么样的框架结构,能够使得处理数据的操作变得简单且易理解,这是大部分开发者尤其是架构设计者一直以来思考的一个问题. REST(Representational State Transfer)是一种编程风格,特别是针对网络应用的设计和开发,采用REST可以显著降低开发的复杂

搭建基于spring MVC框架 + RESTful架构风格技术总结

实战篇: 在SpringMVC框架中搭建RESTful架构风格来完成客户端与服务器端的低耦合度.可扩展性.高并发与大数据流量的访问. 用RESTful架构的创建步骤: 1.创建一个全新的Web工程 2.导包,导入所需要的所有第三方jar包.(springMVC+Hibernate的基本包是必须的) 3.作配置,针对不同的项目需求和不同的搭建设计,开发人员可以按照自己的编码风格来设计符合项目开发具体 应该用多少篇配置文件.但是这几篇配置文件是必不可少的: 3-1.web.xml配置文件:最基本的配

jersey 搭建rest服务风格

这里先介绍关于rest的post方式如何来更新list数组,具体rest的相关概念可以参考 http://blog.csdn.net/lfsfxy9/article/details/9205337 既然是提供服务,那么就一定有service端和cient端.这里会用到jersey 框架封装的一些类,以此来展示一个rest服务风格的服务端和客户端. service端 `@POST @Path("/updatePwd") @Produces({ MediaType.APPLICATION_

更改eclipse的编辑器样式风格

这里提供两种方法: 1.从网站http://eclipsecolorthemes.org/ 下载,选好自己喜欢的风格后下载epf文件...再使用eclipse的import->preferences来导入刚刚的epf即可... 2.我是参考别人文章的: 最近做php环境转到Eclipse上,开发环境默认都是白底黑字的, 时间长了眼睛很难受,于是找了eclipse color theme安装. 方法1:你可以从Eclipse Marketplace中下载 Please visit here: ht

jeecg 3.5.2 新版本4种首页风格 【经典风格,shortcut风格,ACE bootstrap风格,云桌面风格】

[1]经典风格: [2]Shortcut风格: [3]ACE bootsrap风格: [4]云桌面风格: [5]自定义图表 [6].系统监控

基于主程序/子程序风格的kiwc实现

/**  *   */ package com.jason.kwic.mainSubroutine; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; /**  * 基于主程序/子程序风格的kiwc实现  * @author