Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的信号量值_C_Posix_Semaphore - Fatal编程技术网

c语言中的信号量值

c语言中的信号量值,c,posix,semaphore,C,Posix,Semaphore,如果我理解正确,从这篇文章: 然后,在由于来自其他地方的sem_post(&sem1)而从sem_wait(&sem1)传递每个线程之后,信号量的值应该增加。 因此,如果我这样做: sem_wait(&sem1); int sval2; if (sem_getvalue(&sem1, &sval2) == 0){ printf("Semaphore value: %d\n", sval2); } 与 在前面执行时,

如果我理解正确,从这篇文章:

然后,在由于来自其他地方的sem_post(&sem1)而从sem_wait(&sem1)传递每个线程之后,信号量的值应该增加。 因此,如果我这样做:

    sem_wait(&sem1);
    int sval2;
    if (sem_getvalue(&sem1, &sval2) == 0){
        printf("Semaphore value: %d\n", sval2);
    }   

在前面执行时,我的输出应该是:

1
2
3
4
etc......

我这样问是因为在我的项目中,事件似乎遵循正确的顺序,但是当我执行sem_getvalue时,一些信号量上的输出保持不变(0),其他信号量上的输出保持+1一次,然后保持不变(1),而其他信号量上下(1,然后3,然后4,然后5,然后3,等等).

sem\u post
将信号量的值增加一
sem_wait
减少信号量的值(减少1),前提是不会使其低于零(否则会阻塞)。(有关更多技术细节,请参见
man sem_wait


您看到的值是由于调用
sem\u wait
sem\u post
的顺序造成的。

sem\u post
递增,
sem\u wait
递减(并阻塞,直到信号量具有正值,以便不将其递减到零以下)。使用
sem_getvalue
观察到的值取决于线程运行的顺序以及各种递增和递减的顺序。

哦,好吧,我错过了递减部分,我的感觉是它会等待信号量的值等于sem_wait get的值(基于调用的顺序)。谢谢
1
2
3
4
etc......