【教学课件】第11章多线程编程.ppt
《【教学课件】第11章多线程编程.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第11章多线程编程.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第11章 多线程编程在Windows平台上可以同时执行多个任务。例如,可以在使用Word的同时使用VC;使用Word的时候又可以一边打印文档,一边继续编辑文档。Word和VC的并行运行叫进程,在Word中一边打印一边编辑叫做线程。也就是说,操作系统内可以同时运行多个进程,而进程内又可以有多个线程。可以看到,多线程可以提高程序的并发性,同时也可以提高程序的工作效率。例如,M个人搬N个箱子,那么当然是M的值越大搬的速度越快。线程也是如此,例如经常听说某某软件采用多线程下载,速度非常快,这就是多线程的功劳。但是这里要注意,在单CPU平台下,多线程程序在某一时刻只有一个线程在运行,多线程程序运行是交替
2、进行的。如果是多个CPU,当然就有可能多个线程同时运行。虽然单CPU平台每一时刻只能有一个线程在工作,但是这种机制可以让作业快的线程有机会先执行完毕,并且在有时多线程的很多操作与操作系统有关,使用多线程确实能在很大程度上提高程序工作的效率,提高程序的并发性。至于线程间如何切换交替运行,到后面第11.3节线程同步中会结合例子说明。11.1 如何创建线程创建一个线程主要分为两步,即首先调用API函数CreateThread创建一个线程,然后编写线程函数。创建线程完毕以后,主线程会与创建后的线程同时运行。11.1.1 使用CreateThread创建一个线程实际上,main函数或者WinMain函数
3、在运行以后就是一个线程通常叫主线程,所以可以将线程简单地理解为一个函数。API函数CreateThread可以创建一个线程来指向当前进程的虚拟地址空间,也就是说执行一个函数。下面是这个函数的原型。HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);11.1.2 编写线程函数CreateThre
4、ad函数的第3个参数需要设置一个线程函数地址。CreateThread创建线程成功以后,新的线程就从这个函数执行。线程函数必须定义成下面的形式。DWORD WINAPI ThreadProc(LPVOID lpParameter);CreateThread的第4个参数lpParameter将通过lpParameter被传递进来。11.1.3 示例创建一个线程下面代码显示如何用API函数创建一个线程。在这个线程中输出“Hello MyThread”。程序在开始时候创建了一个线程,并且传递了2个主要的参数进去,其他的参数都使用建议值。第3个参数表示线程函数,第4个参数表示给线程函数的参数。线程函数
5、名叫MyThreadProc,参数值是“Hello MyThreadn”,这样MyThreadProc就会在lpParameter中得到这个“Hello MyThreadn”。由于参数类型是LPVOID(void*),所以需要将LPVOID再转换成char*或者const char*类型,到此接收参数工作完毕,开始用printf输出。11.1.4 示例创建多个线程,模拟机票订购在上一小节中讲述了如何创建线程,下面用一个经典的例子来阐述如何创建多个线程。一架飞机有200个座位,现有两个订购地点提供订票服务。飞机票的编号从1200,现在用多线程实现订购过程。代码如下。可以看到,利用第1节学过的知识
6、,上述程序中创建了2个线程,分别模拟2个飞机售票处,飞机票由两个售票处交替地售出。但是这种售票方式存在一个问题,下节将会介绍。11.2 线程同步在多线程程序执行过程中,会有多个线程访问同一块数据临界资源,那么就需要对临界资源进行读写保护。完成这一工作的过程就是线程同步。上面一节的最后一个例子中,创建2个线程模拟2个飞机售票处售票的过程,200张飞机票由2个线程交替出售,这其中存在一个问题,假如修改一下Shop1的while循环代码,如下所示。while(1)if(tickets 0)Sleep(1);/这里添加一行,用来延时printf(Shop1 Sell a Ticket:%dn,tick
7、ets);tickets-;elsereturn 0;11.2.1 线程之间切换时间片本章的开始曾经介绍过,单CPU平台下某一时刻只能有一个线程在运行。但是多线程程序的运行与并行运行相似。这是因为操作系统将CPU的运行时间分成多个小块,每个小块被称为一个时间片。每个线程都运行一个时间片,当时间片限定的时间到,还在运行的线程就将CPU交给其他线程使用,如图所示,假设时间片大小为0.01ms,则线程1运行了0.01ms后暂停,将CPU交给线程2使用。当线程2运行0.01ms后,再将CPU交给线程3使用,依此类推,直到所有线程都运行结束。由于时间片是如此的小,以至于人们无法感觉到,所以多个线程看似在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 11 多线程 编程
限制150内