2014-03-04 161 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