【发布时间】:2015-01-01 19:53:31
【问题描述】:
如果我理解正确,来自这篇文章: http://www.csc.villanova.edu/~mdamian/threads/posixsem.html
然后在每个线程由于来自其他地方的 sem_post(&sem1) 而从 sem_wait(&sem1) 传递之后,信号量的值应该增加。 所以如果我这样做:
sem_wait(&sem1);
int sval2;
if (sem_getvalue(&sem1, &sval2) == 0){
printf("Semaphore value: %d\n", sval2);
}
与
sem_init(&sem1, 0, 0);
之前执行过,我的输出应该是:
1
2
3
4
etc......
我问这个,因为在我的项目中,事件似乎遵循正确的顺序,但是当我执行 sem_getvalue 时,一些信号量的输出保持不变 (0),而另一些信号量会 +1 一次,然后保持不变常数 (1),而在其他情况下,它会上升和下降(1,然后是 3,然后是 4,然后是 5,然后是 3,等等...)。
【问题讨论】: