C语言 信号量的疑惑。。

C语言 信号量的疑惑。。,第1张

一个是Posix实现,一个是System V实现

使用的环境不一样

一般来讲SV的适用于进程同步,POSIX适用于线程同步

System V进程同步 api:semget/semop/semctl

POSIX 线程同步 api:sem_init/sem_destroy

不过POSIX貌似还会分为有名和无名信号量上面说的是无名信号量。

具体的还要看使用的环境。

sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。

sem_wait:一直阻塞等待直到信号量>0。

sem_timedwait:阻塞等待若干时间直到信号量>0。

sem_post:使信号量加1。

sem_destroy:释放信号量。和sem_init对应。 答案补充 关于各函数的具体参数请用man查看,如man sem_init可查看该函数的帮助

信号量的工作原理

由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们的行为是这样的:

P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行

V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1.

举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行。

Linux的信号量机制

Linux提供了一组精心设计的信号量接口来对信号进行操作,它们不只是针对二进制信号量,下面将会对这些函数进行介绍,但请注意,这些函数都是用来对成组的信号量值进行操作的。它们声明在头文件sys/sem.h中。

走不开的快乐

词黄家强.曲黄家驹.主唱黄家驹.

hoi hoi sem sem ba ying fu nou ji fo

开开心心不应苦恼自缚

ji sv hong zem dong da bin zo sen hoi

只须胸襟懂得变做深海

hoi hoi sem sem ba ying zv zou sen mo

开开心心不应追究什么

ji ji tong tong ba bei gai yi

只知通通不必介意

fai lo ya zao ba hoi

快乐也走不开 woo oh

sei gai zong xi fui ngan lang bing

世界纵使灰暗冷冰

yao wua mei sei ba dun nga bei

又话末世不断压迫

yen yen tou bei yu tan ti

人人逃避与忐忑

fan wua dei dou xi

繁华的都市

yen kun dou sa hv gem gou

人群都失去感觉

sei gai mui tin ba dun ging zeng

世界每天不断竞争

dou lao ye yao hei fo bin goi

道路亦有起伏变改

sv yen neng wei nei geng goi

谁人能为你更改

ping fan zong dei nei

平凡中的你

ping fan zong dei ngo ba co

平凡中的我不错

ba sv po yun di dao liu

oh 不须抱怨跌倒了

fai lo zoi fong bou noi cem

快乐在风暴内寻

zo yen ya wui hoi sem

做人也会开心

lang fong lang yu zo ze nei sem

冷雨冷风锁着你心

yue xi wei liu zei bin tan sei

若是为了这便叹息

sv tou cem bei nei dei ying

垂头寻觅你的影

yen kun zong dei nei

人群中的你

sv yen ho ka nei ngan wei

谁人可给你安慰

以上是根据我对粤语发音的理解逐字打上去的,对照原唱,相信会对你有所帮助!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/326772.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存