2014-03-04 99 views
0

我在理解下面的代码示例的输出时遇到了一些问题。C信号量值

int main(int argc, char *argv[]) { 
sem_t *mutex_init; 
int i = 0, mutex_value; 
mutex_init = sem_open("/Semaphore", O_CREAT, 0644, 1); 
for(i = 0; i < 10; i++) { 
    if(sem_getvalue(mutex_init, &mutex_value) < 0) { 
     perror("sem_getvalue() failed"); 
     exit(EXIT_FAILURE); 
    } 
    printf("mutex_value: %d\n",mutex_value);fflush(stdout); 
    if(sem_wait(mutex_init) < 0) { 
     perror("sem_wait() failed"); 
     exit(EXIT_FAILURE); 
    } 
    if(sem_getvalue(mutex_init, &mutex_value) < 0) { 
     perror("sem_getvalue() failed"); 
     exit(EXIT_FAILURE); 
    } 
    printf("mutex_value: %d\n",mutex_value);fflush(stdout); 
    if(sem_post(mutex_init) < 0) { 
     perror("sem_post() failed"); 
     exit(EXIT_FAILURE); 
    } 
    printf("mutex_value: %d\n",mutex_value);fflush(stdout); 
    printf("------\n"); 
} 
return EXIT_SUCCESS; 
} 

我有以下输出

mutex_value: 1 
    mutex_value: 0 
    mutex_value: 0 
    ------ 
    mutex_value: 1 
    mutex_value: 0 
    mutex_value: 0 

,但预计这样的事情

mutex_value: 1 
    mutex_value: 0 
    mutex_value: 1 
    ------- 
    ... 

荫不知道,但也许这是因为“缓冲输出”或别的什么吗?

感谢您的帮助。

回答

0

您不要在sem_post之后拨打sem_getvalue,因此mutex_value有一个陈旧的值。

+0

哦。谢谢。我很尴尬。 :) – user3229664