c语言中的信号量值
如果我理解正确,从这篇文章: 然后,在由于来自其他地方的sem_post(&sem1)而从sem_wait(&sem1)传递每个线程之后,信号量的值应该增加。 因此,如果我这样做: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_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......