线程的创建与撤销

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

师范大学

操作系统(本科)

实验报告

院系:计算机科学技术学院班级:

学生姓名:

学号:20141602141041 指导教师:

教师评阅结果:

教师评语:

实验日期年月日

实验名称:

实验二:线程的创建与撤销

一、实验目的和要求:

熟悉windows系统提供线程的创建与撤销系统调用。

掌握windows系统环境下的线程的创建与撤销方法。

二、实验内容:

使用系统调用createthread()创建一个子线程,并在子线程中显示:thread is runing!,并使用sleep()使线程挂起5s之后使用exitthread(0)撤销线程。

三、实验技术和方法:

1.创建线程

2.撤销线程

3.终止线程

四、实验环境:

使用vc++ 6.0

五、实验步骤和结果:

实验代码:

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

///////////////////////////////////////////////////////////////////// ////////

// The one and only application object

CWinApp theApp;

using namespace std;

void ThreadName1();

static HANDLE hHandle1=NULL;

DWORD dwThreadID1;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) {

int nRetCode = 0;

hHandle1=CreateThread((LPSECURITY_ATTRIBUTES) NULL,

0,

(LPTHREAD_START_ROUTINE) ThreadName1,

(LPVOID) NULL,

0,

&dwThreadID1);

Sleep(5000);

CloseHandle(hHandle1);

ExitThread(0);

return nRetCode;

}

void ThreadName1()

{

printf("Thread is runing!\n");

}

六、结果分析:

在主线程创建了子线程后,将主线程挂起5s以确保子线程运行完毕,之后调用exitthread()将所有子线程撤销。

七、课后习题

7、PCB的作用具体表现在哪几个方面,为什么说PCB是进程的唯一标志?

1 、进程控制块:进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(包含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。

2 、程序段:是进程中能被进程调度程序在CPU上执行的程序代码段。

3、程序段:是进程中能被进程调度程序在CPU上执行的程序代码段执行后产生的中间或最终数据。

4、进程控制块(Process Contro1 B1ock,简称PCB)是用来记录进程状态及其他相关信息的数据结构,PCB是进程存在的唯一标志,PCB存在则进程存在。系统创建进程时会产生一个PCB,撤销进程时,PCB也自动消失。

11.进程在三个基本状态之间转换的典型原因

(1)处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程就由就绪状态变为执行状态(2)正在执行的进程因发生某事件而无法执行,如暂时无法取得所需资源,则由执行状态转变为阻塞状态。(3)正在执行的进程,如因时间片用完或被高优先级的进程抢占处理机而被暂停执行,该进程便由执行转变为就绪状态

21. 从调度、并发性、拥有资源、系统开销比较线程与进调度:

在传统的操作系统中,CPU调度和分派的基本单位是进程。而在引入线程的操作系统中,则把线程作为CPU调度和分派的基本单位,进程则作为资源拥有的基本单位,从而使传统进程的两个属性分开,线程编程轻装运行,这样可以显著地提高系统的并发性。统一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调用。但是在由一个进程中的线程切换到另一进程中的线程,依然会引起线程切换。

并发性:

在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个进程之间也可以并发执行,因而使操作系统具有更好的并发性,从而更有效地是有系统资源和提高系统的吞吐量。例如,在一个为引入线程的单CPU操作系统中,若仅设置一个文件服务进程,当它由于某种原因被封锁时,便没有其他的文件服务进程来提供服务。在引入线程的操作系统中,可以在一个文件服务进程设置多个

服务线程。当第一个线程等待时,文件服务进程中的第二个线程可以继续运行;当第二个线程封锁时,第三个线程可以继续执行,从而显著地提高了文件服务的质量以及系统的吞吐量。

系统开销:

不论是引入了线程的操作系统,还是传统的操作系统,进程都是拥有系统资源的一个独立单位,他可以拥有自己的资源。一般地说,线程自己不能拥有资源(也有一点必不可少的资源),但它可以访问其隶属进程的资源,亦即一个进程的代码段、数据段以及系统资源(如已打开的文件、I/O设备等),可供同一个进程的其他所有线程共享。

拥有资源:

由于在创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似的,在进程切换时,涉及到整个当前进程CPU环境的保存环境的设置以及新被调度运行的CPU环境的设置,而线程切换只需保存和设置少量的寄存器的内容,并不涉及存储器管理方面的操作,可见,进程切换的开销也远大于线程切换的开销。此外,由于统一进程中的多个线程具有相同的地址空间,致使他们之间的同步和通信的实现也变得比较容易。再有的系统中,现成的切换、同步、和通信都无需操作系统内核的干预。

相关文档
最新文档