电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

实验4 并发与调度

32页
  • 卖家[上传人]:w****i
  • 文档编号:92465272
  • 上传时间:2019-07-10
  • 文档格式:DOC
  • 文档大小:269KB
  • / 32 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、实验4 并发与调度115实验4并发与调度4.1 Windows XP线程同步4.1.1 Windows XP的线程同步Windows XP提供的常用对象可分成3类:核心应用服务、线程同步和线程间通讯。其中,开发人员可以使用线程同步对象来协调线程和进程的工作,以使其共享信息并执行任务。此类对象包括互锁数据、临界段、事件、互斥体和信号等。多线程编程中关键的一步是保护所有的共享资源,工具主要有互锁函数、临界段和互斥体等;另一个实质性部分是协调线程使其完成应用程序的任务,为此,可利用内核中的事件对象和信号。在进程内或进程间实现线程同步的最方便的方法是使用事件对象,这一组内核对象允许一个线程对其受信状态进行直接控制 (见表4.1) 。而互斥体则是另一个可命名且安全的内核对象,其主要目的是引导对共享资源的访问。拥有单一访问资源的线程创建互斥体,所有想要访问该资源的线程应该在实际执行操作之前获得互斥体,而在访问结束时立即释放互斥体,以允许下一个等待线程获得互斥体,然后接着进行下去。与事件对象类似,互斥体容易创建、打开、使用并清除。利用CreateMutex() API可创建互斥体,创建时还可以指定一

      2、个初始的拥有权标志,通过使用这个标志,只有当线程完成了资源的所有的初始化工作时,才允许创建线程释放互斥体。表4.1 用于管理事件对象的APIAPI名称描述CreateEvent()在内核中创建一个新的事件对象。此函数允许有安全性设置、手工还是自动重置的标志以及初始时已接受还是未接受信号状态的标志OpenEvent()创建对已经存在的事件对象的引用。此API函数需要名称、继承标志和所需的访问级别SetEvent()将手工重置事件转化为已接受信号状态ResetEvent()将手工重置事件转化为非接受信号状态PulseEvent()将自动重置事件对象转化为已接受信号状态。当系统释放所有的等待它的线程时此种转化立即发生为了获得互斥体,首先,想要访问调用的线程可使用OpenMutex() API来获得指向对象的句柄;然后,线程将这个句柄提供给一个等待函数。当内核将互斥体对象发送给等待线程时,就表明该线程获得了互斥体的拥有权。当线程获得拥有权时,线程控制了对共享资源的访问必须设法尽快地放弃互斥体。放弃共享资源时需要在该对象上调用ReleaseMute() API。然后系统负责将互斥体拥有权传递给下

      3、一个等待着的线程 (由到达时间决定顺序) 。4.1.2 练习与实验在本实验中,通过对事件和互斥体对象的了解,来加深对Windows XP线程同步的理解。1) 回顾系统进程、线程的有关概念,加深对Windows XP线程的理解。2) 了解事件和互斥体对象。3) 通过分析实验程序,了解管理事件对象的API。4) 了解在进程中如何使用事件对象。5) 了解在进程中如何使用互斥体对象。6) 了解父进程创建子进程的程序设计方法。1. 工具/准备工作在开始本实验之前,请回顾教科书的相关内容。需要准备一台运行Windows XP Professional操作系统的计算机,且该计算机中需安装Visual C+ 6.0专业版或企业版。2. 实验内容与步骤(1) 事件对象清单4-1程序展示了如何在进程间使用事件。父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。两个进程在发出信号之后几乎立即终止。步骤1:登

      4、录进入Windows XP Professional。步骤2:在“开始”菜单中单击Microsoft Visual C+ 6.0命令,进入Visual C+窗口。步骤3:编辑实验源程序4-1.cpp (也可直接打开下载的源程序文件4-1.cpp) 。清单4-1 创建和打开事件对象在进程间传送信号 / event项目 # include # include / 以下是句柄事件。实际中很可能使用共享的包含文件来进行通讯 static LPCTSTR g_szContinueEvent = w2kdg.EventDemo.event.Continue; / 本方法只是创建了一个进程的副本,以子进程模式 (由命令行指定) 工作 BOOL CreateChild() / 提取当前可执行文件的文件名 TCHAR szFilenameMAX_PATH; :GetModuleFileName(NULL,szFilename,MAX_PATH); / 格式化用于子进程的命令行,指明它是一个EXE文件和子进程 TCHAR szCmdLineMAX_PATH; :sprintf(szCmdLine,%sch

      5、ild,szFilename); / 子进程的启动信息结构 STARTUPINFO si; :ZeroMemory(reinterpret_cast(&si),sizeof(si); si.cb=sizeof(si);/ 必须是本结构的大小 / 返回的子进程的进程信息结构 PROCESS_INFORMATION pi; / 使用同一可执行文件和告诉它是一个子进程的命令行创建进程 BOOL bCreateOK=:CreateProcess( szFilename,/ 生成的可执行文件名 szCmdLine, / 指示其行为与子进程一样的标志 NULL,/ 子进程句柄的安全性 NULL,/ 子线程句柄的安全性 FALSE,/ 不继承句柄 0,/ 特殊的创建标志 NULL,/ 新环境 NULL,/ 当前目录 &si,/ 启动信息结构 &pi);/ 返回的进程信息结构 / 释放对子进程的引用 if (bCreateOK) :CloseHandle(pi.hProcess); :CloseHandle(pi.hThread); return(bCreateOK); / 下面的方法创建一个事件和一

      6、个子进程,然后等待子进程在返回前向事件发出信号 void WaitForChild() / create a new event object for the child process / to use when releasing this process HANDLE hEventContinue = : CreateEvent( NULL,/ 缺省的安全性,子进程将具有访问权限 TRUE,/ 手工重置事件 FALSE,/ 初始时是非接受信号状态 g_szContinueEvent);/ 事件名称 if (hEventContinue!=NULL) std:coutevent createdstd:endl; / 创建子进程 if (:CreateChild() std:cout child createdstd:endl; / 等待,直到子进程发出信号 std:coutParent waiting on child.std:endl; :WaitForSingleObject(hEventContinue,INFINITE); :Sleep(1500);/ 删去这句试试 std

      7、:coutparent received the envent signaling from childstd:endl; / 清除句柄 :CloseHandle(hEventContinue); hEventContinue=INVALID_HANDLE_VALUE; / 以下方法在子进程模式下被调用,其功能只是向父进程发出终止信号 void SignalParent() / 尝试打开句柄 std:coutchild process beginning.std:endl; HANDLE hEventContinue=:OpenEvent( EVENT_MODIFY_STATE,/ 所要求的最小访问权限 FALSE,/ 不是可继承的句柄 g_szContinueEvent);/ 事件名称 if (hEventContinue!=NULL) :SetEvent(hEventContinue); std:coutevent signaled1 & :strcmp(argv1, child)=0) / 向父进程创建的事件发出信号 :SignalParent(); else / 创建一个事件并等待子进程发出信号 :WaitForChild(); :Sleep(1500); std:coutParent released.std:endl; return 0; 步骤4:单击Buil

      《实验4 并发与调度》由会员w****i分享,可在线阅读,更多相关《实验4 并发与调度》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
     
    收藏店铺
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.