#include <iostream>
#include <windows.h>
#include "Thread.h"
#define N 20 //设置缓冲区的个数
using namespace std;
int main()
{
HANDLE ProThread;
HANDLE CusThread;
full=CreateSemaphore(NULL,0,N,NULL);//创建表示产品个数的信号量
empty=CreateSemaphore(NULL,N,N,NULL);//创建表示空格个数的信号量
mutex=CreateMutex(NULL,FALSE,NULL);//创建互斥信号量
ProThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ProProc,NULL,0,NULL);//创建生产者线程
CusThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)CusProc,NULL,0,NULL);//创建消费者进程
CloseHandle(ProThread);//将生产者线程内核对象的使用计数减1
CloseHandle(CusThread);//将消费者线程内核对象的使用计数减1
Sleep(50000);
return 0;
}
//生产者线程
DWORD ProProc(LPVOID lpParameter)
{
DWORD rev;
while(true)
{
cout<<"生产者正在生产产品......."<<endl<<endl; // 生产一件产品
Sleep(5000);
cout<<"产品生产完成"<<endl<<endl;
rev=WaitForSingleObject(empty,INFINITE);
if(WAIT_OBJECT_0==rev)// P(empty)等待空闲的缓冲区
{
if(WAIT_OBJECT_0==WaitForSingleObject(mutex,INFINITE))// P(mutex)请求互斥对象的所有权
{
cout<<"生产者在放置产品......."<<endl<<endl; // 放入一件产品;
Sleep(1000);
cout<<"生产者放置产品完成"<<endl<<endl;
ReleaseMutex(mutex); // V(mutex)释放呼哧对象的所有权
}
ReleaseSemaphore(full,1,NULL); // V(full);通知消费者有产品可用
}
}
return 0;
}
//消费者线程
DWORD CusProc(LPVOID lpParameter)
{
DWORD rev;
while(true)
{
rev=WaitForSingleObject(full,INFINITE);
if(WAIT_OBJECT_0==rev)//p(full) 等待可取的产品
{
if(WAIT_OBJECT_0==WaitForSingleObject(mutex,INFINITE))//p(mutex)请求互斥对象的所有权
{
cout<<"消费者正在取产品"<<endl<<endl; //取走一件产品
Sleep(10000);
cout<<"消费者已经取走产品"<<endl<<endl;
ReleaseMutex(mutex);//v(mutex)释放互斥对象的所有权
}
ReleaseSemaphore(empty,1,NULL);//v(empty) 通知生产者有放置产品的缓冲区
}
cout<<"消费者正在消费产品"<<endl<<endl;
Sleep(5000);
cout<<"消费者产品消费完成"<<endl<<endl;
}
return 0;
}
wen_hu
- 粉丝: 2
- 资源: 4
最新资源
- 机器学习-集成任务-Titanic
- 基于51单片机的电梯控制器设计
- 2024注册测绘师《综合能力》讲义-第2章 海洋测绘(2).pdf
- 我国企业财务预算存在的问题及对策研究
- python圣诞节简单寻宝小游戏
- QT+VS 上位机串口助手(自学笔记)
- 西安华宇公司全面预算管理体系优化与实践研究
- yolov8速度测量+目标检测与跟踪-免费项目
- 机器学习-苹果质量的聚类分析
- Python函数的思维导图
- vivado单周期cpu设计
- 多任务音频文本生成模型SpeechX的技术实现与评估
- Unity ParrelSync-1.5.0
- ASP.NET程序设计课程设计新闻发布系统本系统是新闻发布系统,参与者包括:游客,普通用户,系统管理员 参与者的主要用例如下: 1)游客:浏览新闻、搜索新闻(按新闻类别搜索、按新闻标题搜索)、查看新闻
- Unity Mirror
- Web开发全过程解析与资源推荐
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈