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; }
您还没有登录,请您登录后再发表评论
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
Java多线程--线程安全问题练习题
C# 窗体程序Winform 多线程练习摇奖器案例源码基于异步委托实现多线程摇奖器
多线程指南----详解,内容十分详细,新手必读书籍之一,多线程指南----详解,内容十分详细,新手必读书籍之一,
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
多线程开发--基本多线程 MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程...
多线程编程-监控线程
进程与线程--里面都是一些小例子,非常易懂
chap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-...
linux下的多线程实例--生产者消费者 linux下的多线程实例--生产者消费者
操作系统--多线程买票---python--有窗体界面,就是操作系统课上的一个课外练习,传上去,保存下来。 exe文件在 map文件夹-->dict文件夹-->map文件夹-->map.exe 已经打包好了,没有python环境的电脑上也...
人工智能-项目实践-多线程-多线程爬虫--抓取淘宝商品详情页URL 本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的ip-proxy-pools-regularly结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的...
Visual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp)....
java多线程学习-ftp上传
Java多线程--让主线程等待所有子线程执行完毕
VB多线程实例 - VBThread2 突破限制
qt多线程实例-数据处理和UI界面显示
vc socket tcp 多线程客户端--服务器结构的例子.zip
Express Logic's ThreadX for Win32 Demo Using Visual C/C++ This demo program is intended for use with the book titled "Real-Time Embedded Multithreading: Using ThreadX and ARM" by Edward L....
相关推荐
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
Java多线程--线程安全问题练习题
C# 窗体程序Winform 多线程练习摇奖器案例源码基于异步委托实现多线程摇奖器
多线程指南----详解,内容十分详细,新手必读书籍之一,多线程指南----详解,内容十分详细,新手必读书籍之一,
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
多线程开发--基本多线程 MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程...
多线程编程-监控线程
进程与线程--里面都是一些小例子,非常易懂
chap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-...
linux下的多线程实例--生产者消费者 linux下的多线程实例--生产者消费者
操作系统--多线程买票---python--有窗体界面,就是操作系统课上的一个课外练习,传上去,保存下来。 exe文件在 map文件夹-->dict文件夹-->map文件夹-->map.exe 已经打包好了,没有python环境的电脑上也...
人工智能-项目实践-多线程-多线程爬虫--抓取淘宝商品详情页URL 本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的ip-proxy-pools-regularly结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的...
Visual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp)....
java多线程学习-ftp上传
Java多线程--让主线程等待所有子线程执行完毕
VB多线程实例 - VBThread2 突破限制
qt多线程实例-数据处理和UI界面显示
vc socket tcp 多线程客户端--服务器结构的例子.zip
Express Logic's ThreadX for Win32 Demo Using Visual C/C++ This demo program is intended for use with the book titled "Real-Time Embedded Multithreading: Using ThreadX and ARM" by Edward L....