- 解释并发与并行,并说明两者关系。
- 进程间有哪几种关系?分别要采取什么策略?
- 为什么说进程的互斥也是一种同步?
- 解释死锁与“饥饿”,并说明两者关系。
- 什么叫做临界区?如何解决进程对临界资源的访问冲突?
- 信号量的物理意义是什么?
- 理解五个哲学家吃面问题,并能盲写出伪代码。
- 一个超市有n个顾客购物,只有一个收银员,试用信号量P、V操作描述顾客进程和收银员之间的关系。写伪代码。
答:
1、并行性是指两个或多个事件在同一时刻发生。并发性是指两个或多个事件在同一事件间隔内发生。
在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序同时运行,但在单处理器(CPU)系统每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理器,则这些可以并发执行的程序便被分配到多个处理器上,实现并行执行,即利用每个处理器来处理一个可并发执行的程序。
(1)一次至多只有一个进程进入临界区内执行。
(2)如果已有进程在临界区中,试图进入此临界区的其他进程应等待。
(3)进入临界区内的进程应在有限时间内退出,以便让等待队列中的一个进程进入。
6、信号量是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。信号量分为单值和多值两种,前者只能被一个线程获得,后者可以被若干个线程获得。利用信号量和PV操作即可解决并发进程竞争问题,又可解决并发进程协作问题。
7、五位哲学家吃面问题就是思考过后就会出现饥饿,就要吃面,吃面的前提就是要有左右两边的叉子才能吃,吃完把叉子放回左右两边。
semaphore CZ[5];
for(int i=0;i<5;i++)
CZ[i]=1;
cobegin
process philosopher_i(){
while(true) {
think();
P(CZ[i]);
P(CZ[(i+1)%5]);
eat();
V(CZ[i]);
V(CZ[(i+1)%5]);
}
}
coend
8、int waiting=0;
int customer=0;
int worker=1;
cobegin
process worker() {
while(true){
P(customer);
waiting--;
V(worker);
}
}
prodess customer() {
if(waiting<0) {
P(worker);
V(worker);
}
if(waiting>0)
waiting++;
}
coend