Linux:POSIX信号量

POSIX信号量

POSIX信号量和SystemV信号量作⽤相同,都是⽤于同步操作,达到⽆冲突的访问共享资源目的。 但POSIX可以⽤于线程间同步。

信号量本质上是一个计数器,这个计数器是用来描述临界资源当中资源数目的。信号量本身也会被多个线程申请,所以信号量本身也是临界资源,那么它要保护临界资源就要保证自己本身是安全的,所以信号量是原子性的。因此信号量不能用整形计数器来代替,因为整形的++和- -操作不是原子的。

只要你申请到信号量之后,必然在临界资源里有一块空间给你留着。

POSIX信号量的使用

初始化信号量(sem_init)
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);

参数:
sem: 要初始化的信号量
pshared: 0表⽰线程间共享,⾮零表⽰进程间共享
value: 信号量初始值

销毁信号量(sem_destroy)
int sem_destroy(sem_t *sem);
等待信号量(sem_wait)(P操作)- -

功能:等待信号量,会将信号量的值减1

int sem_wait(sem_t *sem);
发布信号量(sem_post)(V操作)+ +

功能:发布信号量,表⽰资源使⽤完毕,可以归还资源了。将信号量值加1。

int sem_post(sem_t *sem);

应用信号量实现一个基于环形队列的生产者消费者模型:
https://blog.csdn.net/ETalien_/article/details/86566945

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值