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

Linux进程间通信(7)信号量通信之semget()、semctl()、semop()及其基础实验

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
Linux进程间通信(7)信号量通信之semget()、sEMCtl()、semop()及其基础实验" \! f8 {; g# a% c$ C+ L: _

8 m) T/ s4 f! u7 W) \; N+ [    这个信号量理解起来是有点不容易啊,我看书看了好几遍才知道怎么回事。在讲这一节信号量之前,我还是想先说几个小知识点,这也是我在学习完后最终理解的“精华”,哈哈!
  ]) a- S# A; j9 M3 m
$ K+ p/ j2 Z& c0 v5 p" S; Y信号量是干啥的?
6 \% u4 d2 y4 N3 Z% m) N( F
( F3 W2 \+ h0 Q; y  @
   信号量就是用来解决进程间的同步与互斥问题的一种进程间通信机制。9 I0 q. C. U0 e, l# u
! o" _1 |3 \, _: ^% [( g
同步与互斥的通俗理解
; b$ W) c! Q3 n3 B( G1 t1 u* ?6 B' P' ~2 e
   这两个名词咱们从字面上就能理解。举个例子吧,在创建子进程时,你是怎么保证父子进程执行的先后顺序呢?我在以前的时候是通过sleep()函数来实现的,比如我想让子进程先运行再让父进程运行,那么我就在父进程的程序中加一个sleep()函数,让父进程先睡眠,这样子就能先执行子进程了。有的时候咱们事先无法知道父进程和子进程哪一个先执行,但是要向我那样使用sleep()函数,只能保证先执行子进程,但是不能保证子进程执行完后再执行父进程,这样说能理解吧。所以如果我们想要子进程完全执行完后再执行父进程,就可以利用信号量来解决它们之间的同步问题。还不理解也没关系,我会在后面的实验中再结合实际讲。再举个更通俗的例子,一条食品生产线上,假设A、B共同完成一个食品的包装任务,A负责将食品放到盒子里,B和C负责将盒子打包。必须得是A先装食品B再打包吧,要是B不按规则先打包,那A还装啥,所以就需要一种机制方法保证A先进行B再进行,“信号量”就是这种机制方法,AB之间的关系就是同步关系;再假设打包要用到刀子,而车间就有一把刀子,这时候B和C就构成了互斥关系。; F0 B$ P# n5 x: Y
( Z. _& [9 p+ }! C# g
信号量与信号的区别
" z$ U; O4 N; Y% }" T$ q4 R* _, V1 R( V. N7 C5 y7 j. T# I
   不瞒你说,我刚开始学的时候所理解的就是“信号量是很多个信号”,当然这是错误的哈!光从英语上看就不一样:信号量是 Semaphore,而信号是 Signal 。其实,信号和信号量是不同的。它们虽然都可以实现同步和互斥,但是前者是使用信号处理器来进行的,而后者是使用P,V操作来实现的。(PV操作后边有讲)
9 n/ J2 N8 X1 ^# S! j* w& {* y( A. O2 s2 }9 e. g; l
   好了,进入正题。
3 q" A* k5 H0 D& g. a2 [; ^" e- o- |/ B
信号量概述; ?* Y; k/ d7 H( C

* c9 p' m1 ^/ y& _6 I
游客,如果您要查看本帖隐藏内容请回复
/ K  r  _, W" m4 ~6 p3 `
8 \; D1 \, \8 k6 ?; N9 S
+ s% @8 l( a& ?; H- w
4 O; B6 z  j  l4 t/ |/ w+ M

+ F* `) T+ r1 F4 c: B( w5 s
, `; l  l3 a; e2 |$ v/ U( I

; _6 g3 O& E6 ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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