收藏 分享(赏)

吃水果问题.doc

上传人:yjrm16270 文档编号:6847880 上传时间:2019-04-24 格式:DOC 页数:4 大小:27KB
下载 相关 举报
吃水果问题.doc_第1页
第1页 / 共4页
吃水果问题.doc_第2页
第2页 / 共4页
吃水果问题.doc_第3页
第3页 / 共4页
吃水果问题.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、pv 操作吃水果 2012-04-14 09:50:12| 分类: 操作系统 | 标签: |字号大中小 订阅 *题目内容:桌子有一只盘子,只允许放一个水果,父亲专向盘子放苹果,母亲专向盘子放桔子 儿子专等吃盘子的桔子,女儿专等吃盘子的苹果。只要盘子为空,父亲或母亲就可以向盘子放水果, 仅当盘子有自己需要的水果时,儿子和女儿可从盘子取出。请给出四个人之间的同步关系,并用 pv 操作实现四个人的正确活动的问题。* *题目分析:父亲和女儿是相互制约的,父亲进程执行完即往盘中放入苹果后,女儿进程才能执行即吃苹果,是同步关系; 母亲和儿子是相互制约的,母亲进程执行完即往盘中放入桔子,儿子进程才能执行即吃

2、桔子,也是同步关系 而父亲和母亲这两个进程不能同时进行,是互斥关系;* 用到的函数:CreateSemaphore() 创建一个信号量 WatForSingleObject()声请一个信号量 相当于 p 操作ReleaseSemaphore()释放一个信号量 相当于 v 操作CloseHandle()关闭句柄源码:#include #include using namespace std; /声明句柄 HANDLE EmptyPlate; HANDLE Apple; HANDLE orange; HANDLE fatherThread; HANDLE motherThread; HANDLE

3、sonThread; HANDLE daughterThread; /线程函数声明 DWORD WINAPI father(LPVOID IpParameter); DWORD WINAPI mother(LPVOID IpParameter); DWORD WINAPI daughter(LPVOID IpParameter); DWORD WINAPI son(LPVOID IpParameter); int main() /创建信号量 EmptyPlate = CreateSemaphore(NULL,1,1,NULL); /盘子 Apple = CreateSemaphore(NULL

4、,0,1,NULL); /苹果 orange = CreateSemaphore(NULL,0,1,NULL); /桔子 /创建线程 fatherThread = CreateThread(NULL,0,father,NULL,0,NULL); motherThread = CreateThread(NULL,0,mother,NULL,0,NULL); daughterThread = CreateThread(NULL,0,daughter,NULL,0,NULL); sonThread = CreateThread(NULL,0,son,NULL,0,NULL); /等线程的结束 Wai

5、tForSingleObject(fatherThread,INFINITE); WaitForSingleObject(motherThread,INFINITE); WaitForSingleObject(daughterThread,INFINITE); WaitForSingleObject(sonThread,INFINITE); /关闭线程句柄 CloseHandle(fatherThread); CloseHandle(motherThread); CloseHandle(daughterThread); CloseHandle(sonThread); /关闭信号量句柄 Clos

6、eHandle(EmptyPlate); CloseHandle(Apple); CloseHandle(orange); return 0; /父亲线程函数 DWORD WINAPI father(LPVOID IpParameter) for(int i = 0; i 5; +i) WaitForSingleObject(EmptyPlate, INFINITE); / P 操作 / 开始临界区 cout “nFather 往盘中放一个水果n“; / 结束临界区 ReleaseSemaphore(Apple, 1, NULL); / V 操作 return 0; /母亲线程函数 DWORD

7、 WINAPI mother(LPVOID IpParmeter) for(int i = 0; i 5; +i) WaitForSingleObject(EmptyPlate, INFINITE); / P 操作 / 开始临界区 cout “nMother 往盘中放一个桔子 n“; / 结束临界区 ReleaseSemaphore(orange, 1, NULL); / V 操作 return 0; /女儿线程函数 DWORD WINAPI daughter(LPVOID IpParameter) while(1) WaitForSingleObject(Apple,INFINITE); /p 操作 cout“女儿吃苹果“endl; ReleaseSemaphore(EmptyPlate,1,NULL); /v 操作 return 0; /儿子线程函数 DWORD WINAPI son(LPVOID IpParameter) while(1) WaitForSingleObject(orange,INFINITE); /p 操作 cout“儿子吃苹果“endl; ReleaseSemaphore(EmptyPlate,1,NULL); /v 操作 return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报