首页 > 试题广场 >

回答下面问题

[问答题]

 A、B 两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题。将答案和 向对方提出的新问题组成一个邮件放入对方的邮箱中。假设 A 的信箱最多放 M 个邮件,B 的信箱最多 放 N 个邮件。初始时 A 的信箱中有 x 个邮件(0<x<M),B 的信箱中有 y 个(0<y<N)。辩论者每取出 一个邮件,邮件数减 1。A 和 B 两人的操作过程描述如下:


A{

while(TRUE){

A 的信箱中取出一个邮件; 回答问题并提出一个新问题; 将新邮件放入 B 的信箱;

}

}

B{

while(TRUE){

B 的信箱中取出一个邮件; 回答问题并提出一个新问题; 将新邮件放入 A 的信箱;

}

}


当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和P、V(或 wait、signal)操作,以实现上述过程的同步。 要求写出完整过程,并说明信号量的含义和初值。

推荐

45 .解答:

semaphore Full_A = x;           //Full_A 表示 A 的信箱中的邮件数量

semaphore Empty_A = M-x;     // Empty_A 表示 A 的信箱中还可存放的邮件数量

semaphore Full_B = y;           //Full_B 表示 B 的信箱中的邮件数量

semaphore Empty_B = N-y;     // Empty_B 表示 B 的信箱中还可存放的邮件数量

semaphore mutex_A = 1;          //mutex_A 用于 A 的信箱互斥

semaphore mutex_B = 1;          //mutex_B 用于 B 的信箱互斥


Cobegin

A{

  while(TRUE){

      P(Full_A);

      P(mutex_A);

      从 A 的信箱中取出一个邮件 ;

      V(mutex_A);

      V(Empty_A);

      回答问题并提出一个新问题 ;

      P(Empty_B);

      P(mutex_B);

      将 新邮件放入 B 的信箱 ;

      V(mutex_B);

      V(Full_B);

 }

}

B{

  while(TRUE){

      P(Full_B);

      P(mutex_B);

      从 B 的信箱中取出一个邮件 ;

      V(mutex_B);

      V(Empty_B);

      回答问题并提出一个新问题 ;

      P(Empty_A);

      P(mutex_A);

      将 新邮件放入 A 的信箱 ;

      V(mutex_A);

      V(Full_A);

 }

}

【评分说明】

1 )每对信号量的定义及初值正确,给分。

2 )每个互斥信号量的 P 、 V 操作使用正确,各给分。

3 )每个同步信号量的 P 、 V 操作使用正确,各给分。

4 )其他答案酌情给分。

编辑于 2016-12-15 18:33:21 回复(0)

semaphore Full_A = x;           //Full_A 表示 A 的信箱中的邮件数量

semaphore Empty_A = M-x;     // Empty_A 表示 A 的信箱中还可存放的邮件数量

semaphore Full_B = y;           //Full_B 表示 B 的信箱中的邮件数量

semaphore Empty_B = N-y;     // Empty_B 表示 B 的信箱中还可存放的邮件数量

semaphore mutex_A = 1;          //mutex_A 用于 A 的信箱互斥

semaphore mutex_B = 1;          //mutex_B 用于 B 的信箱互斥

Cobegin

A{

  while(TRUE){

      P(Full_A);

      P(mutex_A);

      从 A 的信箱中取出一个邮件 ;

      V(mutex_A);

      V(Empty_A);

      回答问题并提出一个新问题 ;

      P(Empty_B);

      P(mutex_B);

      将 新邮件放入 B 的信箱 ;

      V(mutex_B);

      V(Full_B);

 }

}

B{

  while(TRUE){

      P(Full_B);

      P(mutex_B);

      从 B 的信箱中取出一个邮件 ;

      V(mutex_B);

      V(Empty_B);

      回答问题并提出一个新问题 ;

      P(Empty_A);

      P(mutex_A);

      将 新邮件放入 A 的信箱 ;

      V(mutex_A);

      V(Full_A);

 }

}

发表于 2017-08-12 21:45:20 回复(0)

45 .解答:

semaphore Full_A = x;           //Full_A 表示 A 的信箱中的邮件数量

semaphore Empty_A = M-x;     // Empty_A 表示 A 的信箱中还可存放的邮件数量

semaphore Full_B = y;           //Full_B 表示 B 的信箱中的邮件数量

semaphore Empty_B = N-y;     // Empty_B 表示 B 的信箱中还可存放的邮件数量

semaphore mutex_A = 1;          //mutex_A 用于 A 的信箱互斥

semaphore mutex_B = 1;          //mutex_B 用于 B 的信箱互斥


Cobegin

A{

  while(TRUE){

      P(Full_A);

      P(mutex_A);

      A 的信箱中取出一个邮件 ;

      V(mutex_A);

      V(Empty_A);

      回答问题并提出一个新问题 ;

      P(Empty_B);

      P(mutex_B);

      新邮件放入 B 的信箱 ;

      V(mutex_B);

      V(Full_B);

 }

}

B{

  while(TRUE){

      P(Full_B);

      P(mutex_B);

      B 的信箱中取出一个邮件 ;

      V(mutex_B);

      V(Empty_B);

      回答问题并提出一个新问题 ;

      P(Empty_A);

      P(mutex_A);

      新邮件放入 A 的信箱 ;

      V(mutex_A);

      V(Full_A);

 }

}

【评分说明】

1 )每对信号量的定义及初值正确,给分。

2 )每个互斥信号量的 P V 操作使用正确,各给分。

3 )每个同步信号量的 P V 操作使用正确,各给分。

4 )其他答案酌情给分。(来自王道论坛)

编辑于 2016-12-15 18:33:21 回复(0)

semaphore Full_A = x; //Full_A 表示 A 的信箱中的邮件数量

semaphore Empty_A = M-x;  // Empty_A 表示 A 的信箱中还可存放的邮件数量

semaphore Full_B = y; //Full_B 表示 B 的信箱中的邮件数量

semaphore Empty_B = N-y;  // Empty_B 表示 B 的信箱中还可存放的邮件数量

semaphore mutex_A = 1; //mutex_A 用于 A 的信箱互斥

semaphore mutex_B = 1; //mutex_B 用于 B 的信箱互斥

A{

while(TRUE){

P(Full_A); P(mutex_A);

从 A 的信箱中取出一个邮件;

V(mutex_A); V(Empty_A);

回答问题并提出一个新问题;

P(Empty_B); P(mutex_B);

将新邮件放入 B 的信箱;

V(mutex_B); V(Full_B);

}

}

B{

while(TRUE){

P(Full_B); P(mutex_B);

从 B 的信箱中取出一个邮件;

V(mutex_B); V(Empty_B);

回答问题并提出一个新问题;

P(Empty_A); P(mutex_A);

将新邮件放入 A 的信箱;

V(mutex_A); V(Full_A);

}

}

发表于 2016-11-19 17:47:39 回复(0)