首页 > 试题广场 >

设有无穷多个信息,输入进程把信息逐个写入缓冲区,输出进程逐个

[问答题]
设有无穷多个信息,输入进程把信息逐个写入缓冲区,输出进程逐个从缓冲区中取出信
息。针对下述两种情况:
(1)缓冲区是环形的,最多可容纳n个信息;
(2)缓冲区是无穷大的。
试分别回答下列问题:
(1)输入、输出两组进程读 / 写缓冲区需要什么条件?
(2)用P,V操作写出输入、输出两组进程的同步算法,并给出信号量含义及初值。


对于缓冲区为n
1. (1)输入进程和输出进程需同步执行,输入进程写缓冲区后后,输出进程才可以读
    (2)由于缓冲区容量有限,所以在任意时刻输入进程存放信息的单元数不能超过缓冲区总容量n
    (3)所有输出进程取出信息的总量不能超过当前写入信息的总数
2. 
// 信号量及说明
typedef semaphore int; // 整型信号量
semaphore mutex = 1;   // 互斥信号量mutex
semaphore empty = n;   // 空缓冲区初始为n
semaphore full = 0;    // 满缓冲区初始为n
int in = 0;            //输入指针
int out = 0;           //输出指针

// Input
while (true)
{
    P(empty);
    P(mutex);
    向buffer(in) 写入;
    in = (in + 1) % n;
    V(mutex);
    V(full);
}

// Output
while(true)
{
    P(full);
    P(mutex);
    从bufffer(out)读信息;
    out = (out + 1) % n;
    V(mutex);
    V(empty);
}

对于缓冲区无穷大:
1.  没有第二条限制
2. mod n操作删去
编辑于 2020-12-29 19:54:30 回复(0)