找回密码
 注册
关于网站域名变更的通知
查看: 373|回复: 1
打印 上一主题 下一主题

Linux多线程编程(三)---学习一下线程之间的同步与互斥进阶实验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-9-23 09:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

该用户从未签到

2#
发表于 2019-9-23 18:10 | 只看该作者
学习一下线程之间的同步与互斥进阶实验。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 01:12 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表