Linux学习之信号量

目录

信号量 posix

基于环形队列的生产消费模型

池化技术

线程池

单例模式


信号量 posix

POSIX 信号量和 SystemV 信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但 POSIX 可以用于线程间同步。
对于一个较大的资源数是可以被分成多份的,这时候我们也会使用信号量表示资源数目。
以电影院举例子:我们的共享资源就是电影院的座位,我们就相当于进程,我们想要获取共享资源,不是立马就去获取共享资源,而是要先买票预定,而电影票就相当于信号量,只有当信号量还存在时,大于零,我们才可以去获取资源。
所以信号量的本质我们可以理解为就是资源的计数器,申请信号量,也就简洁的判断了线程能否进行资源访问了。
线程的信号量相较于systemV的更加简单,我们先来认识一些接口:
初始化信号量
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
参数:
pshared:0 表示线程间共享,非零表示进程间共享
value :信号量初始值
销毁信号量
int sem_destroy(sem_t *sem);
等待信号量
功能:等待信号量,会将信号量的值减 1
int sem_wait(sem_t *sem); 
发布信号量
功能:发布信号量,表示资源使用完毕,可以归还资源了。将信号量值加 1
int sem_post(sem_t *sem);
上一节生产者 - 消费者的例子是基于 queue , 其空间可以动态分配 , 现在基于固定大小的环形队列重写这个程序 POSIX信号量)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜求佬带

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值