互斥量mutex机制,在任何时刻()进入它保护的区域。
A.允许任意数量任意类型的线程
B.允许一个读线程任意个写线程
C.允许一个写线程任意个读线程
D.只允许一个线程
A.允许任意数量任意类型的线程
B.允许一个读线程任意个写线程
C.允许一个写线程任意个读线程
D.只允许一个线程
A.信号量w的初值是0
B.信号量mutex的初值是1
C.计数器rc的初值是0 rc是互斥资源么
D.语句P(mutex)的位置可以放到语句rc = rc + 1后面
E.语句①②可以取消
阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。
【说明】
有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。
【C代码1】
int flag[2]; /+flag数组,初始化为FALSE*/
Enter_Critical_Section(int my_task_id, int other_task_id)
{ while (flag[other_task_id]==TRUE); /*空循环语句*/
flag[my_task_id]=TRUE;
}
Exit_Critical_Section(int my_task_id, int other_task_id)
{ flag[my_task_id]=FALSE;
}
当一个进程要访问临界资源时,就可以调用【C代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。
【C代码2】
Enter_Critical_Section(0,1);
……使用这个资源……
Exit_Critical_Section(0,1);
……做其他的事情……
什么是临界资源(critical resource)?请用100字以内的文字简要说明。
阅读以下说明和Java代码,将应填入(n)处的字句写在对应栏内。
【说明】
下面的Java程序演示了程序竞争资源(Mutex的实例对象)而引起程序死锁的一种例子。
【Java程序】
import java.applet.*;
import java.awt.*;
//此处声明一个互斥类
class Mutex { }
class A extends (1)
{
private Mutex first,second;
public A(Mutex f,Mutex s)
{
first = f;
second = s;
}
public void run()
{
//锁定first变量
(2) (first)
{
try
{ //本线程挂起,等待重新调度
Thread.sleep(1); //注意此处(1)不是小题序号
}
catch(InterruptedException e){}
System. out. println("threadA got first mutex");
(2) (second) //锁定second变量
{ //do something
System. out. println("threadA got second mutex");
} //释放second变量
} //释放first变量
}
}
class B extends (1)
{
private Mutex first,second;
public B(Mutex f,Mutex s)
{
(3) ;
second = s;
}
public void run()
{
(2) (second) //锁定second变量
{
//do something
try
{
Thread.sleep(((int)(3*Math.random()))*1000);
//本线程挂起,等待重新调度
}
catch(InterruptedException e){}
System.out.println("threadB got second mutex");
(2) (first) //锁定first变量
{
//do something
System.out.println("threadB got first mutex");
} //释放first变量
} //释放second变量
}
}
public class DeadlockExample
{
public static void main(String arg[])
{
Mutex mutexX = new Mutex();
Mutex mutexY = new Mutex();
AthreadA = new A(mutexX,mutexY);
B threadB = new B (4);
threadA.(5);
threadB.start();
}
}
信号量是操作系统中用于互斥和同步机制的一个共享的整数变量。信号量仅可以由初始化、唤醒(Signal)和等待(Wait)三种操作访问。
对于给定的信号量S,等待操作Wait(S)(又称P操作)定义为:
if s>0 then (39) else挂起调用的进程
唤醒操作Signal(S)(又称V操作)定义为:
if 存在等待的进程 then 唤醒这个进程else (40)
给定信号量S,可以定义一个临界区来确保其互斥,即保证在同一时刻这个临界区只能够被一个进程执行。当S被初始化为1时,代码段
(41):
{临界区}
(42):
定义了一个临界区。
这样的临界区实际上是将共享数据和对这些数据的操作一起封装起来,通过其互斥机制一次只允许一个进程进入,这种临界区通常称为(43)。
A.S:=0
B.S:=S+1
C.S:=S-1
D.S:=1
E.Signal(S+1)
在操作系统的进程管理中,若系统中有10个进程使用互斥资源R,每次只允许3个进程进入互斥段(临界区),则信号量s的变化范围是();若信号量s的当前值为-2,则表示系统中有()个正在等待该资源的进程。
A.-7~1
B.-7~3
C.-3~O
D.-3~10(27)
多个并发进程使用一个互斥信号量S时,如果S=0,则表示______。
A.有一个进程在临界区中
B.有一个进程在临界区中,另一个进程正在等待进入临界区
C.有多个进程在临界区中
D.有一个进程在临界区中,另一些进程正在等待进入临界区
多个并发进程使用一个互斥信号量nap时,如果nap=0,则通常表示(21)。由于可重用资源的冲突会引起死锁,产生死锁有4个必要条件:互斥、保持和等待、循环等待以及(22)分配方式。
A.有多个进程在临界区中
B.有一个进程在临界区中
C.没有进程在临界区中
D.有一个进程在临界区中,另一些进程正在等待进入临界区
(26)A.–7~1 B.–7~3 C.–3~0 D.–3~10
(27)A.0 B.1 C.2 D.3
(15)A.-2~0
B.-2~1
C.-6~2
D.-8~1
(16)A.1
B.2
C.3
D.4
信号机制是解决进程同步和互斥的有效工具。实现进程间的互斥时,公用变量信号的初值一般设置为(15);实现进程间的同步时,私用变量初值一般设置为(16)。
(54)
A.-2
B.-1
C.0或资源数目
D.1或资源数目