linux信号量命令简析

 linux信号量用下面一组函数(系统调用)来实现。

int sem_init(sem_t *sem,int pshared,unsigned int value); 
首先用sem_init初始化一个信号量,注意pshared表示允许几个进程共享该信号量,一般设0用于进程内的多线程共享,要看是否支持进程共享,请查看下你的系统的man手册。第三个参数value表示可用的资源的数目,即信号灯的数目,咱们这儿只有1个打印机所以设成1。

int sem_wait(sem_t *sem); 
然后线程调用sem_wait取获取这个信号灯,第一个线程一看,有1个,他就拿到了,然后可以继续后继操作,此时信号灯自动减1,变成0个。那么第二个线程调用sem_wait时就会阻塞在这儿了。

int sem_post(sem_t *sem); 
第一个线程完成打印后,调用sem_post释放信号灯,信号灯数目变成1,将会唤醒等待的第二个线程,然后第二个线程接着打印。


int sem_trywait(sem_t *sem); 
sem_trywait ,顾名思义,就是测试一下看看现在有没有可用的信号灯,而不会阻塞。

int sem_getvalue(sem_t *sem); 
sem_getvalue就是读取当前的信号灯的数目。

int sem_destroy(sem_t *sem); 
最后当所有任务完成后,主线程调用sem_destroy释放这个信号量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值