用c++实现PV操作(父亲母亲儿子女儿)
题目:桌上有一只盘子,每次只能放入1只水果。爸爸专放苹果,妈妈专放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。模拟P,V操作实现爸爸、妈妈、儿子、女儿进程的同步控制。
由于我用的是_beginthreadex函数,所以要在编译器里设置Debug Multithreaded DLL
我用的编译器是VC++ 点击project->settings->c/c++,在category下选择code generation,在use run-time liberary下选择Debug Multithreaded DLL
代码如下,自己写的,不怎么样,但肯定能跑起来
#include<string.h>
#include<stdio.h>
#include<windows.h>
#include<process.h>
LPCTSTR sp;//创建信号量ID
LPCTSTR sa;
LPCTSTR so;
HANDLE hp=CreateSemaphore(NULL,1,1,sp);//创建信号量
HANDLE ha=CreateSemaphore(NULL,0,1,sa);
HANDLE ho=CreateSemaphore(NULL,0,1,so);
UINT __stdcall father(LPVOID P)//创建程序
{
WaitForSingleObject(hp,INFINITE);//p操作
printf("父亲放了苹果\n");
Sleep(100);
ReleaseSemaphore(ha,1,NULL);//v操作
return 0;
}
UINT __stdcall mother(LPVOID P)
{
WaitForSingleObject(hp,INFINITE);
printf("母亲放了桔子\n");
Sleep(100);
ReleaseSemaphore(ho,1,NULL);
return 0;
}
UINT __stdcall son(LPVOID P)
{
WaitForSingleObject(ho,INFINITE);
printf("儿子吃了桔子\n");
Sleep(100);
ReleaseSemaphore(hp,1,NULL);
return 0;
}
UINT __stdcall daughter(LPVOID P)
{
WaitForSingleObject(ha,INFINITE);
printf("女儿吃了苹果\n");
Sleep(100);
ReleaseSemaphore(hp,1,NULL);
return 0;
}
int main(int argc, char* argv[])
{
UINT uid;
HANDLE h[10];
h[0]=(HANDLE)::_beginthreadex(NULL,0,father,NULL,0,&uid);
h[1]=(HANDLE)::_beginthreadex(NULL,0,mother,NULL,0,&uid);
h[2]=(HANDLE)::_beginthreadex(NULL,0,son,NULL,0,&uid);
h[3]=(HANDLE)::_beginthreadex(NULL,0,daughter,NULL,0,&uid);
h[4]=(HANDLE)::_beginthreadex(NULL,0,daughter,NULL,0,&uid);
h[5]=(HANDLE)::_beginthreadex(NULL,0,mother,NULL,0,&uid);
h[6]=(HANDLE)::_beginthreadex(NULL,0,mother,NULL,0,&uid);
h[7]=(HANDLE)::_beginthreadex(NULL,0,son,NULL,0,&uid);
h[8]=(HANDLE)::_beginthreadex(NULL,0,father,NULL,0,&uid);
h[9]=(HANDLE)::_beginthreadex(NULL,0,daughter,NULL,0,&uid);
Sleep(1000);
::WaitForMultipleObjects(4,h,TRUE,INFINITE);
for(int i=0;i<10;i++)
::CloseHandle(h[i]);
printf("end");
system("pause");
return 0;
}
用c++实现PV操作(父亲母亲儿子女儿)相关推荐
- 计算机操作系统pv实验,计算机操作系统PV操作例题.doc
计算机操作系统PV操作例题 问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车.用PV操作来实现他们之间的协调. S1:是否允许 ...
- 操作系统 吃水果放水果问题 PV操作
使用信号量和PV操作实现父亲.母亲.儿子.女儿4人,通过一个可以容纳1个水果的盘子进行削水果吃水果的活动协同. 问题描述: 桌子上有一只盘子,每次只能向其中放入一个水果.爸爸专向盘子中放苹果,妈妈专向 ...
- 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果
一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...
- PV操作经典例题——吃水果
例1:桌上有一个盘子,每次只能放一个水果,妈妈向盘中放苹果和橘子,儿子专等吃盘里的橘子,女儿专等吃盘里的苹果.只要盘子空,妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出他 ...
- linux环境下pv吃水果问题c语言,用pv操作实现 吃水果问题(C++语言)
/** 作者:wwj 时间:2012/4/12 功能:实现吃水果问题 **题目内容:桌子有一只盘子,只允许放一个水果,父亲专向盘子放苹果,母亲专向盘子放桔子 儿子专等吃盘子的桔子,女儿专等吃盘子的苹果 ...
- 操作系统9道经典PV操作
文章目录 仓库存储 放水果 放水果2 理发师理发 吸烟者问题 面包师问题 写者优先的读者-写者问题 交通问题 共用缓冲区 仓库存储 问题描述:有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大, ...
- 【互斥同步经典PV操作】
互斥同步经典PV操作 内容来自B站王道老师计算机考研操作系统讲解 文章目录 互斥同步经典PV操作 一.单生产者和消费者 二.多生产者和多消费者 三.吸烟问题 四.读者与写者问题 总结 一.单生产者和消 ...
- 操作系统pv操作学习总结
PV操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思. 目录 1 简介 2 详细资料 3 解释 ▪ 信号量的概念 ▪ 典型理解偏差 简介 1962年,狄克斯特拉离开数学中心进入位于 ...
- PV操作与信号灯及例子+三大操作系统共同点的线程通信
看待技术问题要瞄准其本质,不管是Linux.VxWorks还是WIN32,其涉及到多线程的部分都是那些内容,无非就是线程控制和线程通信,它们的许多函数只是名称不同,其实质含义是等价的,下面是三大操作系 ...
最新文章
- HiCar人-车-家全场景智慧互联
- conda-forge,conda,-c的理解
- python学习笔记(7-11)
- python 条形图-可视化库-Matplotlib-条形图(第四天)
- 关于bitnami redmine 的一些问题
- 2025年全球结构化布线市场预计将达到165亿美元
- 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
- 将protobuf文档转换成java代码
- seo 伪原创_胡子哥谈seo优化:那些不被了解的伪原创技巧
- js 根据公历日期 算出农历_一招教会你公历换算成农历,要不要试试看
- 详解 ConcurrentHashMap
- 剑指offer系列14---合并两个升序链表
- app与后台交互之间的几种安全认证机制
- 【java基础 12】HashMap中是如何形成环形链表的?
- 2017年软件工程第八次作业-互评Alpha版本
- 【语料库】语料库资源汇总
- java实现解压war_java文件操作之war压缩解压
- python文本处理的第三方库是什么,python - 实现文本分类[简单使用第三方库完成]...
- 截止失真放大电路_一个经典电路,一个重要概念:硬件必会之三极管实用解析...
- 一木.溪桥---Python之简介、环境搭建、PyCharm配置
热门文章
- H3C-防火墙HA配置(主备)
- vim粘贴串行和缩进混乱问题
- 适合上班族的兼职有哪些?上班族兼职赚钱项目
- 前端自动化构建工具合集之webpack-姜威-专题视频课程
- vue点击按钮弹窗显示图片
- html期末大作业美食主题网页源码0006
- (OpenCV+Python)--RGB转HSI
- R语言error in diff.default(xscale) : 无法弹到最上层的視窗(‘grid‘和‘graphics‘输出有混合?)错误: VECTOR_ELT() can only be
- redis 应用 海量查找 hscan
- Java随机生成6位正整数