11.3.2 信号量的使用

本文详细介绍了Linux信号量的使用,包括等待信号量、发布信号量和获取信号量值的操作。信号量作为资源管理工具,通过sem_wait、sem_post和sem_getvalue等函数进行操作。sem_wait用于申请资源,可能阻塞;sem_post表示资源释放;sem_getvalue返回信号量的当前值,但可能已过时。

11.3.2 信号量的使用

信号量的使用,总是和某种可用资源联系在一起的。

创建信号量时的value值,其实指定了对应资源的初始个数。

当申请该资源时,需要先调用sem_wait函数

当发布该资源或使用完毕释放该资源时,则调用sem_post函数

1.等待信号量

sem_wait函数用于等待信号量,它会将信号量的值减1,其接口定义如下:

int sem_wait(sem_t *sem);

如果调用sem_wait函数时,信号量的当前值大于0,那么sem_wait函数立刻返回。

否则sem_wait函数陷入阻塞,待信号量的值大于0之后,再执行减1操作,然后成功返回

如果陷入阻塞的sem_wait函数被信号中断,则返回-1,并且置errno为EINTR。

使用sigaction注册信号处理函数时,无论是否使用了SA_RESTART标志位,都不会自动重启系统调用。

如果仅仅是尝试等待信号量,而不想陷入阻塞,则可以调用sem_trywait函数,其接口定义如下:

int sem_trywait(sem_t *sem);

sem_trywait会尝试将信号量的值减1,如果信号量的值大于0,那么该函数将信号量的值减1之后会立刻返回。

如果信号量的当前值为0,那么sem_trywait也不会陷入阻塞,而是立刻返回失败,并置errno为EAGAIN。

若资源当前不可得,那么sem_wait调用就可能会陷入无限期阻塞,而sem_trywait调用则选择立刻返回失败,绝不阻塞。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值