多线程的调度.doc_第1页
多线程的调度.doc_第2页
多线程的调度.doc_第3页
多线程的调度.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 多线程的调度一、 实验目的1、掌握多线程编程的特点。2、重点掌握实时多任务的同步问题。二、实验原理1、多线程的概念多线程就是指:一个进程内可以有多个可执行的单元,每个单元就是一个线程,它包含独立的堆栈和寄存器状态,每个线程共享所有的进程资源,包括打开的文件、信号标识及动态分配的内存等等。一个进程内的所有线程使用同一个位地址空间,而这些线程的执行由系统调度程序控制,调度程序决定哪个线程可执行以及什么时候执行线程。线程有优先级别, 优先权较低的线程必须等到优先权较高的线程执行完任务后再执行。在多处理器的机器上,调度程序可将多个线程放到不同的处理器上运行。这样就可使处理器的任务平衡,也提高了系统的运行效率。一般来说,一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,这就是所谓基于多线程的多任务。2、多线程的创建与终止要想创建新的线程,可以调用MFC的全局函数AfxBeginThread()。该函数启动新线程并返回控制,然后,新线程和调用AfxBeginThread()的线程同时运行。当用户需要终止一个线程的执行时, 需要调用函数TerminateThread()。这两个函数的详细说明可以查看MSDN帮助信息。3、线程的同步 编写多线程应用程序的最重要的问题就是线程之间的资源同步访问。因为多个线程在共享资源时如果发生访问冲突通常会产生不正确的结果。例如,一个线程正在更新一个结构的内容的同时另一个线程正试图读取同一个结构。结果,我们将无法得知所读取的数据是什么状态:旧数据,新数据,还是二者的混合?MFC提供了一组同步和同步访问类来解决这个问题,同步对象包括:CSyncObject,CSemaphore,CMutex,CcriticalSection和CEvent;同步访问对象包括:CMultiLock和CSingleLock三、实验内容进程同步都要涉及到的一个经典问题就是哲学家就餐问题下面来介绍一下哲学家就餐问题: 哲学家就餐问题中,一组哲学家围坐在一个圆桌旁,每个哲学家的左边都只有一只筷子(当然他的右边也有一只筷子,但是这是他右边哲学家的左边的筷子),他们吃完了就思考,思考了一会就会饿,饿了就想吃,然而,为了吃饭,他们必须获得左边和右边的筷子。当每个哲学家只拿有一只筷子的时候,会坐者等另一只筷子,在每个哲学家都只拿一个筷子的时候,就会发生死锁。实验的主要内容就是利用多线程来实现哲学家就餐的问题,以达到理解进程同步的目的。四、实验步骤1、利用AppWizard生成一个名为Philosophers基于单文档的应用程序框架。 2、在类CPhilosophersView构造函数先把每个哲学家对应的线程句柄设置为NULL,再新建一个同步类对象。CPhilosophersView:CPhilosophersView()/ TODO: add construction code herefor(int i = 0; i PHIL_NUM; i+)m_pThreadi = NULL;m_pMutex = new CMutex;m_pEvent = new CEvent(FALSE, TRUE);3、模拟多个哲学家的行为 void CPhilosophersView:OnPlayMany() / TODO: Add your command handler code hereint i, left, right;int chopStartX6, chopStartY6, chopEndX6, chopEndY6;int philX6, philY6;PARAM *pParam = NULL; for(i = 0; i PHIL_NUM; i+)chopSticksi = FALSE;for (i =0; iResetEvent();CHOP_COORDINATE(150, 150);PHIL_COORDINATE(150, 150);for(i = 0; i Id = i;pParam-m_hWnd = this-m_hWnd;pParam-philX = philXi;pParam-philY = philYi;left = i;right = (i+1) % PHIL_NUM;pParam-chopXY0 = chopStartXleft;pParam-chopXY1 = chopStartYleft;pParam-chopXY2 = chopEndXleft;pParam-chopXY3 = chopEndYleft;pParam-chopXY4 = chopStartXright;pParam-chopXY5 = chopStartYright;pParam-chopXY6 = chopEndXright;pParam-chopXY7 = chopEndYright;m_pThreadi = AfxBeginThrea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论