sem_getvalue 测试

#include <semaphore.h>
#include <stdio.h>

int main(int argc, char **argv)
{
 int i=0,value;
 sem_t test_sem;
 sem_init(&test_sem,0,1);

 sem_getvalue(&test_sem,&value);
 printf("value%d: %d\n",i++,value);
 sem_wait(&test_sem);
 sem_getvalue(&test_sem,&value);
 printf("value%d: %d\n",i++,value);
 sem_post(&test_sem);
 sem_getvalue(&test_sem,&value);
 printf("value%d: %d\n",i++,value);
 return 0;
}

sem_getvalue可以用来测试信号量的值,当post多次,信号量也对应增加,

而wait则会对信号量进行减少,所以当有多次post,而我们只要相应一次的时候,可以在wait

时候进行判断,比如

while(1)
 { 
  sem_wait(&text_sem);
  sem_getvalue(&text_sem,&value);
  if(value == 0)
  {
          do something。。。
  }
 }

或者在

sem_post的时候加入sem_getvalue进行判断

  sem_getvalue(&text_sem,&value);
  if(value == 0)
  {
          sem_post(&text_sem);

  }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值