题目:桌上有一只盘子,每次只能放入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操作(父亲母亲儿子女儿)相关推荐

  1. 计算机操作系统pv实验,计算机操作系统PV操作例题.doc

    计算机操作系统PV操作例题 问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车.用PV操作来实现他们之间的协调. S1:是否允许 ...

  2. 操作系统 吃水果放水果问题 PV操作

    使用信号量和PV操作实现父亲.母亲.儿子.女儿4人,通过一个可以容纳1个水果的盘子进行削水果吃水果的活动协同. 问题描述: 桌子上有一只盘子,每次只能向其中放入一个水果.爸爸专向盘子中放苹果,妈妈专向 ...

  3. 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果

    一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...

  4. PV操作经典例题——吃水果

    例1:桌上有一个盘子,每次只能放一个水果,妈妈向盘中放苹果和橘子,儿子专等吃盘里的橘子,女儿专等吃盘里的苹果.只要盘子空,妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出他 ...

  5. linux环境下pv吃水果问题c语言,用pv操作实现 吃水果问题(C++语言)

    /** 作者:wwj 时间:2012/4/12 功能:实现吃水果问题 **题目内容:桌子有一只盘子,只允许放一个水果,父亲专向盘子放苹果,母亲专向盘子放桔子 儿子专等吃盘子的桔子,女儿专等吃盘子的苹果 ...

  6. 操作系统9道经典PV操作

    文章目录 仓库存储 放水果 放水果2 理发师理发 吸烟者问题 面包师问题 写者优先的读者-写者问题 交通问题 共用缓冲区 仓库存储 问题描述:有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大, ...

  7. 【互斥同步经典PV操作】

    互斥同步经典PV操作 内容来自B站王道老师计算机考研操作系统讲解 文章目录 互斥同步经典PV操作 一.单生产者和消费者 二.多生产者和多消费者 三.吸烟问题 四.读者与写者问题 总结 一.单生产者和消 ...

  8. 操作系统pv操作学习总结

    PV操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思. 目录 1 简介 2 详细资料 3 解释 ▪ 信号量的概念 ▪ 典型理解偏差 简介 1962年,狄克斯特拉离开数学中心进入位于 ...

  9. PV操作与信号灯及例子+三大操作系统共同点的线程通信

    看待技术问题要瞄准其本质,不管是Linux.VxWorks还是WIN32,其涉及到多线程的部分都是那些内容,无非就是线程控制和线程通信,它们的许多函数只是名称不同,其实质含义是等价的,下面是三大操作系 ...

最新文章

  1. HiCar人-车-家全场景智慧互联
  2. conda-forge,conda,-c的理解
  3. python学习笔记(7-11)
  4. python 条形图-可视化库-Matplotlib-条形图(第四天)
  5. 关于bitnami redmine 的一些问题
  6. 2025年全球结构化布线市场预计将达到165亿美元
  7. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
  8. 将protobuf文档转换成java代码
  9. seo 伪原创_胡子哥谈seo优化:那些不被了解的伪原创技巧
  10. js 根据公历日期 算出农历_一招教会你公历换算成农历,要不要试试看
  11. 详解 ConcurrentHashMap
  12. 剑指offer系列14---合并两个升序链表
  13. app与后台交互之间的几种安全认证机制
  14. 【java基础 12】HashMap中是如何形成环形链表的?
  15. 2017年软件工程第八次作业-互评Alpha版本
  16. 【语料库】语料库资源汇总
  17. java实现解压war_java文件操作之war压缩解压
  18. python文本处理的第三方库是什么,python - 实现文本分类[简单使用第三方库完成]...
  19. 截止失真放大电路_一个经典电路,一个重要概念:硬件必会之三极管实用解析...
  20. 一木.溪桥---Python之简介、环境搭建、PyCharm配置

热门文章

  1. H3C-防火墙HA配置(主备)
  2. vim粘贴串行和缩进混乱问题
  3. 适合上班族的兼职有哪些?上班族兼职赚钱项目
  4. 前端自动化构建工具合集之webpack-姜威-专题视频课程
  5. vue点击按钮弹窗显示图片
  6. html期末大作业美食主题网页源码0006
  7. (OpenCV+Python)--RGB转HSI
  8. R语言error in diff.default(xscale) : 无法弹到最上层的視窗(‘grid‘和‘graphics‘输出有混合?)错误: VECTOR_ELT() can only be
  9. redis 应用 海量查找 hscan
  10. Java随机生成6位正整数