多线程_吃水果问题
来源:互联网 发布:网络传销量刑标准最新 编辑:程序博客网 时间:2024/04/20 01:18
n问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。
解:四人之间的关系:1爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系;2爸爸放的苹果,女儿吃,所以两者是同步关系;3妈妈放的桔子,儿子吃,所以两者也是同步关系。
- #include <Windows.h>
- #include <iostream>
- using namespace std;
- DWORD WINAPI Father( LPVOID lpParameter);
- DWORD WINAPI Monther( LPVOID lpParameter);
- DWORD WINAPI Son( LPVOID lpParameter);
- DWORD WINAPI Daughter( LPVOID lpParameter);
- HANDLE Empty;
- HANDLE Full;
- int data = 0;
- int main()
- {
- HANDLE hFather = CreateThread(NULL, 0, Father, NULL, 0, NULL) ;
- HANDLE hMonther = CreateThread(NULL, 0, Monther, NULL, 0, NULL) ;
- HANDLE hSon = CreateThread(NULL, 0, Son, NULL, 0, NULL) ;
- HANDLE hDauther = CreateThread(NULL, 0, Daughter, NULL, 0, NULL);
- Empty = CreateEvent(NULL, FALSE, TRUE, NULL);
- Full = CreateEvent(NULL, FALSE, FALSE, NULL);
- Sleep(400);
- CloseHandle(hDauther);
- CloseHandle(hFather);
- CloseHandle(hMonther);
- CloseHandle(hSon);
- return 0;
- }
- DWORD WINAPI Father( LPVOID lpParameter)
- {
- while(1)
- {
- int i = 2 ;
- while( i % 2 == 0)
- {
- i = rand() % 999 + 1;
- }
- //父亲产生单数
- data = i;
- SetEvent(Full);
- }
- return 0;
- }
- DWORD WINAPI Monther( LPVOID lpParameter)
- {
- while(1)
- {
- WaitForSingleObject(Empty, INFINITE);
- int i = 1 ;
- while( i % 2 != 0)
- {
- i = rand() % 999 + 1;
- }
- //妈妈产生双数
- data = i;
- SetEvent(Full);
- Sleep(1);
- }
- return 0;
- }
- DWORD WINAPI Son( LPVOID lpParameter)
- {
- while(1)
- {
- WaitForSingleObject(Full, INFINITE);
- if ( data % 2 == 0)
- {
- //儿子输出双数
- cout << "Son :" << data << endl;
- }
- SetEvent(Empty);
- }
- return 0;
- }
- DWORD WINAPI Daughter( LPVOID lpParameter)
- {
- while(1)
- {
- WaitForSingleObject(Full, INFINITE);
- if ( data % 2 == 1)
- {
- //女儿输出单数
- cout << "Daughrer :" << data << endl;
- }
- SetEvent(Empty);
- }
- return 0;
- }
- 多线程_吃水果问题
- 多线程练习----吃水果问题
- 操作系统多线程例子--吃水果问题
- 吃水果问题,c++版
- 吃水果问题的模拟程序
- 用pv操作实现 吃水果问题(C++语言)
- 操作系统 吃水果问题的P V 操作原语
- PV操作解决吃水果问题(Java实现)
- 水果不可乱吃
- hdoj 1205 吃水果
- 夏季吃水果常识
- 脂肪肝吃什么水果
- jlh吃水果
- 多线程---和尚吃馒头问题
- 生什么病,吃什么水果
- 生什么病,吃什么水果
- 生什么病吃什么水果
- 生什么病吃什么水果
- C指针声明解读之左右法则
- JavaScript中的匿名函数及函数的闭包
- 肯定可以再TalkBack中设置 ListView焦点停在某个item上的方法
- 一个项目的部分代码
- eclipse如何修改android的application name
- 多线程_吃水果问题
- 多线程_哲学家问题
- Aras Innovator发布Web Services
- 多线程_生产者消费者
- 多线程_-读者写者问题
- Word插件----从数据库中提取表结构,生成字典文档
- hdu 4699 Editor(Splay)
- 阿里巴巴简历筛选原则
- 奋战杭电ACM(DAY10)1015