#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);
}