文章目录
进程的基本概念
进程的定义与特征
进程控制块
进程的状态
进程调度队列
进程控制
进程创建
进程终止
进程阻塞与唤醒
进程的挂机与激活
进程同步
互斥、同步
临界区
信号量机制
信号量的应用
互斥
同步
经典进程的同步问题
生产者-消费者问题
读者-写者问题
哲学家进餐问题
进程通信
线程
习题
正确答案:
互斥信号量 s1=1, s2=1;
(因为只有一个get、copy和put进程,故可不定义互斥信号量)
同步信号量4个:
full1=0, empty1=1; 为一对
full2=0, empty2=1; 为一对
get process:
while (1) {
read data;
wait (empty1);
wait (s1)
put data into buffer1
//因为是单缓,故无in指针,可写为
// buffer1=x;
signal (s1)
signal (full1)
}
Copy process:
while (1) {
wait (full1)
wait (s1)
copy data from buffer1
//单缓,无out指针,可写y=buffer1
signal (s1)
signal (empty1)
wait (empty2)
wait (s2)
put data into buffer2
// buffer2=y
signal(s2)
signal (full2)
}
Put process:
while(1) {
wait (full2)
wait (s2)
get data from buffer2
// z=buffer2
signal (s2)
signal (empty2)
print data on printer
}
正确答案:
互斥信号量mutex=1;
每次放纸时只能放入一包A3或A4纸,每次取纸时只能取一包A3或A4纸,放纸和取纸不能同时进行。
三个资源信号量
full3是A3“满”数目,初值为0, full4是A4“满”数目,初值为0, empty是文件柜“空”数目,初值为10:
full3 + full4 + empty == 10
只要文件柜未满empty>0,A3和A4纸均可放入;
只要A3未空full3>0,便可取走A3纸;
只要A4未空full4>0,便可取走A4纸
Semaphone empty=10, full3=0, full4=0, mutex=1;
放纸进程:
while(1){
wait (empty);
if (放A3纸){
wait (mutex);
放A3纸;
signal (mutex);
signal (full3);}
else {
wait (mutex);
放A4纸;
signal (mutex);
signal (full4);}
离开;
}
取纸进程:
while(1){
if (取A3纸){
wait(full3);
wait (mutex);
取A3纸;
signal (mutex);
}
else{
wait(full4);
wait (mutex);
取A3纸;
signal (mutex);
}
signal(empty);
离开;}