1 / 11
文档名称:

实践-15--哲学家进餐问题.docx

格式:docx   大小:23KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实践-15--哲学家进餐问题.docx

上传人:文库旗舰店 2020/5/28 文件大小:23 KB

下载得到文件列表

实践-15--哲学家进餐问题.docx

文档介绍

文档介绍:实践15哲学家进餐问题实践内容说明在函数中使用图形方式显示哲学家进餐问题,每个哲学家使用一个线程控制,随机进行进餐或者思考,使用互斥量和事件进行同步和互斥控制。程序性质Windows和控制台混合应用程序多线程运行环境设置(1)建立项目在VisualC++,单击New菜单,弹出New对话框;在New对话框中选择Project标签切换至Project标签页;在Project标签页的项目列表中选择Win32Application选项,Location输入框输入项目所在的路径,或者单击输入框右侧的按钮,在弹出的ChooseDirectory对话框中选择项目所在的磁盘分区和所在的目录;在Project标签页的Projectname输入框中输入项目名称;Project标签页中的其他选项保持默认选择(单选框Createnewworkspace前有黑点,Platforms选项框中Win32前打勾),完成设置界面如图10所示。图10设置项目为Windows应用完成设置后单击OK,New对话框关闭,弹出Win32ConsoleApplication–Step1of1对话框。在Win32ConsoleApplication–Step1of1对话框中选择Anemptyproject单选项。Win32ConsoleApplication–Step1of1对话框如图11所示。图11说明刚建立的项目为空项目完成Win32ConsoleApplication–Step1of1对话框后单击Finish按钮,Win32ConsoleApplication–Step1of1对话框关闭,弹出NewProjectInformation对话框。NewProjectInformation对话框中显示了当前建立项目的一些信息。NewProjectInformation对话框如图12所示。图12显示新项目信息单击NewProjectInformation对话框中的OK按钮,关闭NewProjectInformation对话框,项目建立步骤完成。(2)建立文件单击File菜单中的New菜单项,弹出New对话框。在New对话框中单击Files标签,切换至Files标签页;在Files标签页的文件列表中选择C++SourceFile选项,在File输入框中输入文件名。New对话框设置如图13所示。图13在新建的项目中建立一个C文件完成New对话框设置后,单击OK按钮关闭New对话框,在项目中创建文件步骤完成。(3)输入文件在创建的文件窗口中输入要调试运行的操作系统源文件。(4)修改编译设置单击Project菜单中的Settings菜单项,弹出ProjectSettings对话框。在ProjectSettings对话框中单击C/C++标签,切换至C/C++标签页;在C/C++标签页中的Category下拉列表选择框中选择CodeGeneration选择项;在Userun-timelibrary下拉列表选择框中选择DebugMultithreadedDLL选项。设置界面如图14所示。图14设置成多线程环境完成设置后单击OK按钮关闭ProjectSettings对话框。(5)编译运行单击Build菜单中的RebuildAll菜单项编译项目,或者单击工具栏中BuildMinibar工具栏的Build工具按钮编译项目。BuildMinibar工具栏形状为,Build工具按钮对应的图标为,对应的快捷键是F7。4实现程序#include<>#include<>#include<>#include<>#defineDEGRESS_TO_RADIAN(x)(x)*{ HWNDhWnd;//窗口句柄intchopXY[8];// intId;//哲学家的编号intisEating;}PARAM;#definePHIL_NUM5//哲学家数目,可改变为其他数目#defineSTART_POINT150#defineDESK_DIAMETER200//圆桌直径#definePHIL_DIAMETER30//哲学家圆圈直径#defineCHOP_LENGHT50//筷子长度#IME10000//持续时间长度intchopSticks[PHIL_NUM];//筷子的初态intFinished[PHIL_NUM];//用餐是否完成HANDLEhMutex;//互斥量HANDLEhEvent;//事件unsignedint__stdcallDineMany(LPVOIDpParam);intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPreInstance,