下载此文档

同步练习.doc


文档分类:行业资料 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
同步练习34652同步问题
前趋图问题
、P2、P3、P4、P5、P6为一组合作的进程,其前趋图如图1-1示。试用P、V操作描述这6个进程的同步。信号量必须说明类型、意义。
1、解答:设置四个进程P1、P2共用信号量f1, P2和P3、 P4共用信号量分别为f2、f3, P5和P3、 P4共用信号量分别为f4、f5 , P5和P6共用信号量为f6
int f1=0,f2=0,f3=0,f4=0,f5=0;
main()
{
cobegin
P1( );
P2( );
P3( );
P4( );
P5( );
P6( );
coend
}
P1( )
{
while( 1 )
{
……
v( f1 );

}
}
P4( )
{
while( 1 )
{
p(f3 );
……
v( f5 );
}
}
P2( )
{
while( 1)
{
p(f1 );
……
v( f2 );
v( f3 );
}
}
P5( )
{
while( 1 )
{
p(f5 );
……;
v( f6 );
}
}
P3( )
{
while( 1 )
{
p(f2 );
……
v( f4 );

}
}
P6( )
{
while( 1 )
{
p(f6 );
……;

}
}
(二)生产者——消费者问题
3. A、B、C三个进程合作完成邮件服务器的收发工作。其中A进程负责接受邮件,然后通过缓冲区Buffer1发送给B进程;B进程将通过缓冲区buf1接收的邮件,经过整理,然后通过缓冲区Buffer2发送给C进程;C进程通过缓冲区buf2将B进程的发送来经过整理的邮件发送到用户。
Buffer1有m1个缓冲块,Buffer2有m2个缓冲块。
:设置三个进程PA、PB、PC,分别表示A、B、C三个进程,设置互斥信号量mutex1、mutex2, 其初值均为1;设置同步信号量full1、empty1、full2、empty2,其初值分别为0、m1、0、m2。同步描述如下:
int mutex1=1 , mutex2=1;
int full1=0, empty1=m1, full2=0, empty2=m2;
main()
{
cobegin
PA( );
PB( );
PC( );
coend
}
PA( )
{
while( 1 )
{
p(empty1);
p(mutex1);
将数据放入buffer1;
v(mutex1);
v( full1 );
}
}
PB( )
{
while( 1 )
{
p(full1);
p(mutex1 );
从buffer1中取出数据;
v(mutex1);
v(empty1 );
p(empty2);
p(mutex2 );
将数据放入buffer2;
v(mutex2 );
v( full2 );
}
}
PC( )
{
while( 1 )
{
p(full2 );
p(mutex2 );
从buffer2中取出数据;
v(mutex2);
v(empty2 );
}
}
(三)读者/写者问题
有两组并发进程:
读者和写者,共享一组数据区
要求:
允许多个读者同时执行读操作
不允许读者、写者同时操作
不允许多个写者同时操作
如果读者来:
1)无读者、写者,新读者可以读
2)有写者等,但有其它读者正在读,则新读者也可以读
3)有写者写,新读者等
如果写者来:
1)无读者,新写者可以写
2)有读者,新写者等待
3)有其它写者,新写者等待
解: 设有两个信号量w=1,mutex=1
另设一个全局变量readcount =0
w用于读者和写者、写者和写者之间的互斥
readcount表示正在读的读者数目
读者:
while (1)
{
P(mutex);
readcount ++;
if (readcount==1) P (w);
V(mutex);

P(mutex);
readcount --;
if (readcount==0) V(w);
V(mutex);
};
写者:
while (1)
{
P(w);

V(w);
};
m

同步练习 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人274030239
  • 文件大小91 KB
  • 时间2018-04-25