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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 thinkfunny 于 2019-9-23 10:15 编辑 4 H* x" W) I# L7 j- F

% t0 i+ O& i0 T0 a4 e& j0 r实验目的8 Y1 z1 d2 E  y( ~' P
$ h! L  M9 L$ c: t& ], _, {
    通过编写经典的“生产者-消费者”问题的实验,进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。
( W4 r) B: u" m) n: N) _$ g* _
+ F7 w3 A5 O' v1 ~- q  I: d实验内容. u1 L3 R3 A  }# W3 _

, s2 ^' c% x$ u9 h" h; V! D   “生产者--消费者”问题描述如下:
8 t* t  H) K; R5 u' N2 N8 V' ~8 y7 K$ y6 M; c" r2 D( ?9 Y! C# @$ A
   有一个有限缓冲区(这里用有名管道实现FIFO式缓冲区)和两个线程:生产者和消费者,它们不停地把产品放入缓冲区和从缓冲区拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也必须等待。另外,因为缓冲区是临界资源,所以生产者和消费者之间必须互斥执行。它们之间的关系如下图1所示:2 F, W" o, T: S/ z8 a7 R+ R* C
$ L6 `' `1 z2 |( H
  

  n: X: `) ]% f$ X6 o3 u$ D
1 n: c: R0 l4 ^  `( N  这里要求使用有名管道来模拟有限缓冲区,并且使用信号量来解决“生产者---消费者”问题中的同步和互斥问题。
' k) T* L' y. {: g6 d' H0 U* T" g3 L* t+ U
实验步骤: [1 [3 B# G) G

3 c( \+ i8 G. H0 \/ _0 q  (1)   信号量的考虑。这里使用3个信号量,其中两个信号量avail和full分别用于解决生产者和消费者之间的同步问题,mutex用于解决这两个线程之间的互斥问题。其中,avail表示有界缓冲区中的空单元数,初始值为N;full表示有界缓冲区中的非空单元数,初始值为0;mutex是互斥信号量,初始值为1。3 D/ h6 d( v/ H+ I7 l! g2 x
- d& ~& p* m/ S6 B
  (2)  流程图如下:
& P0 ]5 R) a# X  j
$ m; A6 p2 s7 g. b
游客,如果您要查看本帖隐藏内容请回复

1 m: V/ o$ Q* ^, R$ a4 O# L8 V  {" z5 E! p" p
1 R, a/ a5 d+ @( l/ W
/ ~8 D) ]* ?) L7 M. |1 M
( P0 A* K" i8 I" Z6 P

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 03:10 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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