习题1 进程与线程

习题1 进程与线程
习题1 进程与线程

习题1 进程与线程

1. 选择题

(1)关于线程和进程,下列说法哪些是正确的是( D )

A. 线程是操作系统分配处理器时间的基本单位;

B. 进程是操作系统分配处理器时间的基本单位;

C. 一个线程可以属于多个进程;

D. 一个进程可以有多个线程;

(2)多线程C#程序中,类MyClass 定义如下:

class MyClass {

ReaderWriterLock rwl = new ReaderWriterLock();

private int i;

public void Read() {

rwl.AcquireReaderLock(Timeout.Infinite);

Interlocked.Increment(ref i); Thread.Sleep(1000);

rwl.ReleaseReaderLock();

}

public void Write() {

rwl.AcquireWriterLock(Timeout.Infinite);

Interlocked.Decrement(ref i); Thread.Sleep(1000);

rwl.ReleaseWriterLock();

}

}

请问,可以有多少个线程同时调用Read()并将i 的值加1?(B )

A. 0个

B. 1个

C. 多个

D. 没有

2. 填空题

(1)使用System.Diagnostics命名空间提供的进程类Process,用户可以查看和管理大部分Windows进程任务,包括启动和___终止__进程,以及___管理__进程信息。启动一个已经定位的进程可以使用Process类的__start()_方法。

(2)使用System.Threading命名空间提供的线程类Thread的__Start()__方法,可以启动多线程,要实现等待该线程结束的任务可以使用Thread的__Join()_方法。

(3)线程同步可以采用以下四种方法: wait()、sleep()、notify()、notityAll ()。

3. 简答题

(1)进程和线程分别怎么理解?

进程是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。

线程是"进程"中某个单一顺序的控制流。也被称为轻量进程.计算机科学术语,指运行中的程序的调度单位。

(2)System.Diagnostics命名空间提供的进程类Process有些什么属性?

BasePriority CanRaiseEvents Container DesignMode

(3)线程是如何创建的?怎样设置线程优先级?

1.创建线程是通过创建新的Thread对象来实现的。Thread类的构造函数需要一个ThreadStart委托或ParameterizedThreadStart委托作为参数。在调用Thread对象的Start()方法之前,该线程不会开始执行。Start方法立即返回,经常是在实际启动新线程之前返回。新的线程将从ThreadStart或ParameterizedThreadStart委托表示的方法的第一行开始执行。只能调用一次Start()方法,多次调用将引发ThreadStateException异常。

线程启动后可以使用ThreadState和IsAlive属性来确定任何时刻的线程状态,但是绝不应该将这些属性用于同步线程的活动

Thread InstanceCaller = new Thread(new

ThreadStart(serverObject.InstanceMethod)); //线程声明

InstanceCaller.Start();//线程启动

2. System.Threading.Thread.Priority枚举了线程的优先级别

(4)线程类的主要方法有哪些?

isActive() 判断是否处于执行状态

Suspend() 暂停执行 reSume 恢复执行 start() 开始执行 Stop() 停止执行

sleep() 睡眠 run() 程序体 yield() 向其他线程退让运行权

(5)线程同步有几种方法?每种方法之间有什么区别?

4种。wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

(6)BackGroundWorker可实现的功能有哪些?

该控件有三个事件:

DoWork 、ProgressChanged 和 RunWorkerCompleted

在程序中调用RunWorkerAsync方法则会启动DoWork事件的事件处理,当在事件处理过程中,调用 ReportProgress方法则会启动ProgressChanged事件的事件处理,而当DoWork事件处理完成时,则会触发RunWorkerCompleted事件。

4. 编程题

(1)创建一个带有3个子线程的程序,第一个线程序启动10毫秒后,第二个线程再启动,然后再等10毫秒后第三个线程启动,每一个线程从1~1000循环输出线程的名称和计数,当3个线程结束时要输出各自的结束信息,然后,主线程结束。

(2)制作一个程序模拟图书馆中的书籍借阅操作,有两个人几乎同时查阅某一本书是否还有,如果有,就将书的数量减1,如果没有输出“书籍已经全部借出”。用3个线程同步的方法分别实现程序。(提示:用两个线程访问同一个变量)

编写一个自定义类Employee,要求:

◆该类包含连接到access 的Northwind数据库的公用方法。

◆该类包含若干个字段用来存储从“雇员表”中读取的若干字段的值。

◆该类包含在表中移动记录指针的方法。

◆该类包含修改字段值的方法。

◆该类包含将字段值显示出来的方法。

相关文档
最新文档