您好,欢迎访问三七文档
实验1线程的创建与撤销一、设计人员相关信息1.设计者姓名:学号:班级:通过本实验熟悉Windows系统提供的线程创建与撤销等系统调用,掌握Windows系统环境下线程的创建与撤销方法。三、实验内容1.熟悉开发环境VisualC++6.0;2.Windows系统环境下线程的创建与撤销方法;3.利用2个线程模拟火车票销售系统。四、实验准备知识1.线程创建函数HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttribSIZE_TdwStackSize,LPTHREAD_START_ROUTINElpStartAddrLPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);2.线程撤销函数VOIDExitThread(DWORDdwExitCode);3.线程终止函数BOOLTerminateThread(HANDLEhThread,DWORDdwExitCode);4.线程挂起函数VOIDSleep(DWORDdwMilliseconds);5.关闭句柄函数BOOLCloseHandle(HANDLEhObject);五、实验步骤及结果1.Windows系统环境下线程的创建与撤销方法。该程序段在主线程中调用CreateThread()创建2个子线程,并在子线程中显示类似“Threadisrunning!”等字样。其主要代码如下:#includewindows.h#includeiostream.hintindex=0;DWORDWINAPIThread1Proc(LPVOIDlpParameter);DWORDWINAPIThread2Proc(LPVOIDlpParameter);intmain()//主线程{HANDLEhThread1;HANDLEhThread2;hThread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL);//创建线程1hThread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL);//创建线程2CloseHandle(hThread1);//关闭句柄CloseHandle(hThread2);while(index++1000){coutmainthreadisrunning!endl;}ExitThread(0);//撤销线程,参数0表示要撤销进程中的所有线程;缺省亦可return0;}DWORDWINAPIThread1Proc(LPVOIDlpParameter){while(index++1000){coutThread1isrunning!endl;}return0;}DWORDWINAPIThread2Proc(LPVOIDlpParameter){while(index++1000){coutThread2isrunning!endl;}return0;}2.利用2个线程模拟火车票销售系统1。该程序段利用上例代码实现2个线程模拟火车票销售系统,其主要代码如下所示:#includewindows.h#includeiostream.hinttickets=100;DWORDWINAPIThread1Proc(LPVOIDlpParameter);DWORDWINAPIThread2Proc(LPVOIDlpParameter);intmain()//主线程{HANDLEhThread1;HANDLEhThread2;hThread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL);//创建线程1hThread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL);//创建线程2CloseHandle(hThread1);//关闭句柄CloseHandle(hThread2);Sleep(5000);ExitThread(0);//撤销线程,参数0表示要撤销进程中的所有线程;缺省亦可return0;}DWORDWINAPIThread1Proc(LPVOIDlpParameter){while(TRUE){if(tickets0)coutThread1sellticket:tickets--endl;elsebreak;}return0;}DWORDWINAPIThread2Proc(LPVOIDlpParameter){while(TRUE){if(tickets0)coutThread2sellticket:tickets--endl;elsebreak;}return0;}上图结果显示Thread1售出了两张代号为98的票,所以存在隐患,需要改进。3.利用2个线程模拟火车票销售系统2。该段程序亦是实现利用2个线程模拟火车票销售系统,其主要代码如下所示。其主要作用在于将上例中可能出现的隐患展现出来。#includewindows.h#includeiostream.hinttickets=100;DWORDWINAPIThread1Proc(LPVOIDlpParameter);DWORDWINAPIThread2Proc(LPVOIDlpParameter);intmain()//主线程{HANDLEhThread1;HANDLEhThread2;hThread1=CreateThread(NULL,0,Thread1Proc,NULL,0,NULL);//创建线程1hThread2=CreateThread(NULL,0,Thread2Proc,NULL,0,NULL);//创建线程2CloseHandle(hThread1);//关闭句柄CloseHandle(hThread2);Sleep(5000);ExitThread(0);//撤销线程,参数0表示要撤销进程中的所有线程;缺省亦可return0;}DWORDWINAPIThread1Proc(LPVOIDlpParameter){while(TRUE){if(tickets0){Sleep(1);coutThread1sellticket:tickets--endl;}elsebreak;}return0;}DWORDWINAPIThread2Proc(LPVOIDlpParameter){while(TRUE){if(tickets0){Sleep(1);coutThread2sellticket:tickets--endl;}elsebreak;}return0;}程序隐患在于多个线程同时访问一种资源,若要避免这种隐患,需保证多线程间的同步,也就是一个线程访问这种资源时,其他线程不能同时访问。六、心得体会通过这次实验,我了解了Windows系统提供的线程创建与撤销等系统的调用,掌握了此系统环境下线程的创建与撤销方法,并且巩固了所学知识。
本文标题:线程的创建和撤销
链接地址:https://www.777doc.com/doc-5703422 .html