父亲 儿子 苹果 女儿 橘子问题
2015-01-16 16:16
337 查看
#include "stdafx.h" #include<iostream> #include<Windows.h> #include<process.h> #include<time.h> using namespace std; HANDLE Orange=0; HANDLE Apple=0; HANDLE Empty=0; int gCount=0; bool Mark=false; DWORD son(LPVOID lm) { while(gCount<12) { ::WaitForSingleObject(Apple,1000); if(Mark) cout<<"儿子吃了一个苹果\n"; Mark=false; ::ReleaseSemaphore(Empty,1,NULL); } return 0; } DWORD Daughter(LPVOID lm) { while(gCount<12) { ::WaitForSingleObject(Orange,1000); if(Mark) cout<<"女儿吃了一个橘子\n"; Mark=false; ::ReleaseSemaphore(Empty,1,NULL); } return 0; } DWORD father(LPVOID lm) { while(gCount<12) { ::WaitForSingleObject(Empty,INFINITE); gCount++; int a=::rand()%100; Mark=true; if(a<50) { ::ReleaseSemaphore(Orange,1,NULL); cout<<"父亲放入了一个橘子\n"; } else { ::ReleaseSemaphore(Apple,1,NULL); cout<<"父亲放入了一个苹果\n"; } } return 0; } int main() { ::srand(NULL); Orange=::CreateSemaphoreA(NULL,0,1,NULL); Apple=::CreateSemaphoreA(NULL,0,1,NULL); Empty=::CreateSemaphoreA(NULL,1,1,NULL); HANDLE hThread[3]={0}; hThread[0]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)son,NULL,0,NULL); hThread[1]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)father,NULL,0,NULL); hThread[2]=::CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Daughter,NULL,0,NULL); ::WaitForMultipleObjects(3,hThread,true,INFINITE); for(int i=0;i<3;i++) { ::CloseHandle(hThread[i]); } ::CloseHandle(Orange); ::CloseHandle(Apple); ::CloseHandle(Empty); }题目:父亲有苹果橘子共12个盘子一个,儿子只吃苹果,女儿只吃橘子,那么使用三个信号量表示这次事件,是否有橘子Orange 是否有苹果Apple 盘子是否是空的Empty,同时还有一个Mark,用于标记盘子里是否有东西,我们默认等待时间是1秒,一旦放入了东西,那么就是TRUE,没放就是FALSE,这样的话,儿子女儿线程就可以鉴别是时间到了,还是放入东西来进行不同的处理。
相关文章推荐
- 在PV操作中会有一个经典的例子就是爸爸妈妈儿子女儿吃水果问题,爸爸妈妈向盘子里放入水果,儿子女儿向盘子取水果。然而爸爸只向盘子放苹果,妈妈只向盘子放橘子,女儿只能吃苹果,儿子只能吃橘子。并且盘子里只能
- 生产者与消费者之苹果橘子问题
- 爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题
- 用c++实现PV操作(父亲母亲儿子女儿)
- 定义父亲类Father(姓lastName,财产property,血型bloodType),儿子Son类(玩游戏PlayGame方法),女儿Daughter类(跳
- 桌上有一空盘,最多允许存放一只水果。爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。用wait、signal操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。
- 一位农村父亲对城市儿子的训诫
- 他儿子就这样娶到了比尔·盖茨的女儿
- 一位农村父亲对城市儿子的训诫
- 毛里塔尼亚政变 总统女儿回忆父亲被抓情形
- 儿子需要这样的父亲
- 白苹果问题解决办法以及原因简单分析
- 苹果在日本召回第一代iPod Nano问题电池
- 一位父亲给刚步入社会的儿子的40个忠告
- 父亲啊,儿子是您永远的牵挂
- 一位父亲给刚步入社会的儿子的40个忠告
- 面试题之苹果问题
- 一道逻辑题的分析(3女儿年龄问题)
- 养儿子是建设银行,女儿是招商银行