操作系统练习 - 缓冲区的写入、加工、输出

假设有输入、加工和输出3个并发进程共享一个缓冲区B,输入进程负责从输入设备读入一条记录,每读一条记录后把它存放在缓冲区B中,加工进程在缓冲区B中加工输入进程存入的记录。输出进程负责把加工后的记录打印输出。缓冲区B中每次只能存放一条记录,当记录被加工输出后,缓冲区B中才可存放下—条新记录。请用P、V操作来描述它们并发执行时能正确工作的程序。

 

解:

设4个变量。

mutex 代表是否有进程在使用B   empty代表B是否为空,

full代表B是否有记录,   handle代表记录是否被处理

Semaphore  mutex = 1,  empty = 1,  full = 0,  handle = 0;

//读入进程
void input () {
    do {
        wait( empty );
        wait( mutex );
        读入一条记录,每读一条记录后把它存放在缓冲区B中
        signal( mutex );
        signal( full );
    } while( True )
}

// 加工进程
void process () {
    do {
        wait( full );
        wait( mutex );
        加工输入进程存入的记录
        signal( mutex );
        signal( handle );
    } while( True )
}

// 输出进程
void process () {
    do {
        wait( handle );
        wait( mutex );
        加工后的记录打印输出
        signal( mutex );
        signal( empty );
    } while( True )
}

你可能感兴趣的:(操作系统)