设有一个公有信箱和若干个私有信箱。公有信箱可由所有人在其中存/取信件;而私有信箱只能由特定拥有者使用,在其中存/取信件。显然,信箱是有容量限制的。
参考答案:采取wait()和signal()信号量机制:
semaphore S1=MaxNum_Of_Publucmailbox; //公有信箱最大容量
semaphore S2=0;
semaphore mutex_public-1;
semaphore mutex_private[1..N]=1;
semaphore Q1[1..N]=MaxNum_Of_privatemailbox; //私有信箱最大容量
semaphore Q2[1..N]=0;
public_sender()
{
wait(S1);
wait(mutex_public);
send letter to public_mail;
signal(S2);
signal(metex_public);
}
private_sender (int i)
{
wait(Q1[i]);
wait(mutex_private(i));
send letter to private_mail[i];
signal(Q2[i]);
signal(mutex_private[i]);
}
public_receiver()
{
wait(S2):
wait(mutex_public);
receive letter to public_mail;
signal(S1);
signal(mutex_public);
}
private_receiver(int i)
{
wait(Q2[i]);
wait(mutex_private[i);
receive letter from private-mail[i];
signal(Q1[i]);
signal(mutex_private[i]);