多线程练习----吃水果问题
来源:互联网 发布:电子产品目录制作知乎 编辑:程序博客网 时间:2024/04/27 08:45
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++版
- 【代码练习4】利用多线程处理和尚吃馒头问题
- 吃水果问题的模拟程序
- 【代码练习6】利用多线程生产消费问题实现熊吃蜂蜜问题
- 用pv操作实现 吃水果问题(C++语言)
- 操作系统 吃水果问题的P V 操作原语
- PV操作解决吃水果问题(Java实现)
- 水果不可乱吃
- hdoj 1205 吃水果
- 夏季吃水果常识
- 脂肪肝吃什么水果
- jlh吃水果
- 多线程---和尚吃馒头问题
- 蓝桥杯-基础练习-十进制转十六进制(吃水果对身体有好处!)
- 生什么病,吃什么水果
- string类实现
- 无线上网卡常见问题与分析
- OpenVPN高级路由技术-扩展成巨大的网络
- Intel 8042键盘控制器详细介绍
- 工作16个月留念
- 多线程练习----吃水果问题
- QT中的内存管理
- mystring实现
- 理解ThreadLocal
- 0点至12点之间(包括0点及12点),时针、分针和秒针共重合几次?每次是几点?
- android--- Linux Proc虚拟文件系统—Android CPU、内存、网络流量获取
- GPIO驱动分析&结构详解
- MSSQLSERVER不是一个Sql server2000实例
- 深入浅出Win32多线程程序设计之线程控制