|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 thinkfunny 于 2019-9-23 10:15 编辑
7 ]1 [- g% x; z: d/ h
7 N# Q& s7 y W% C实验目的5 R( Z0 `& s) l1 k7 R
) L& {; d6 P7 y+ y 通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。8 h1 h9 W6 Q& D0 h& S
. D7 r. R& y* v0 x
实验内容5 O! B5 n& L/ q2 ]
+ {& b/ H8 K7 M
“生产者--消费者”问题描述如下:
4 V7 `$ `: J' z; y: l3 R
' V$ b3 ` I! S8 e 有一个有限缓冲区(这里用有名管道实现FIFO式缓冲区)和两个线程:生产者和消费者,它们不停地把产品放入缓冲区和从缓冲区拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。它们之间的关系如下图1所示:9 r# s3 E5 \- v5 ^: [6 d9 c
0 L. T9 F( U# Q3 x; h' x2 f4 y
! { C8 {& L6 K1 e2 `% _
7 V3 |! H, b$ V/ `; S! J
这里要求使用有名管道来模拟有限缓冲区,并且使用信号量来解决“生产者---消费者”问题中的同步和互斥问题。5 X# }9 ^2 C5 A U
' s6 D5 V0 S- c/ I+ B Z实验步骤
Q/ S5 }' K( g. k$ C; u5 @" x; l q$ g2 j; s& {* s9 S
(1) 信号量的考虑。这里使用3个信号量,其中两个信号量avail和full分别用于解决生产者和消费者之间的同步问题,mutex用于解决这两个线程之间的互斥问题。其中,avail表示有界缓冲区中的空单元数,初始值为N;full表示有界缓冲区中的非空单元数,初始值为0;mutex是互斥信号量,初始值为1。
, R" v( r2 ]: X
q, [. O4 \9 f5 d (2) 流程图如下:* I+ _: D5 h! U1 v
. j2 }- w: |5 i6 T+ D
& b' j e2 Q3 L" R/ P+ r( c; n, H7 H- q
) L+ m& E7 Y+ G7 Y! i, r" A
8 k# Z3 j y* |2 h! Y+ A
/ M# j3 q3 ^: C6 Y) X9 y
|
|