信号量

进化版的互斥锁(1–>N)
由于互斥锁的粒度比较大,如果我们希望在多个线程
sem_init函数
初始化一个信号量。
sem_destroy函数
销毁一个信号量。
sem_wait函数
给信号量加锁 –
sem_trywait函数
尝试对信号量加锁 –
sem_timedwait函数
限时等待一个信号量。
sem_post函数
给信号量解锁 ++
以上6个函数的返回值都是:成功返回0,失败返回-1,同时设置errno。(注意,它们没有pthread前缀)
seem_t 类型,本质仍是结构体。但应用期间可简单看做为整数,忽略实现细节(类似于使用文件描述符)。
seem_t sem;规定信号量sem不能<0。头文件<semaphore.h>
信号量基本操作:
sem_wait:
1.信号量大于0,则信号量–(类比pthread_mutex_lock)
2.信号量等于0,造成线程阻塞
sem_post:
将信号量++,同时唤醒阻塞在信号量上的线程(类比pthread_mutex_unlock)
但,由于sem_t的实现对用户隐藏,所以所谓的++、–操作只能通过函数来实现,而不能直接++、–符号。
信号量的初值,决定了占用信号量的线程的个数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值