各位大侠,小弟初学内核,多多关照。看到信号量这章,关于__down()函数看不明白,望赐教。
for (;;) {
int sleepers = sem->sleepers;
if (!atomic_add_negative(sleepers - 1, &sem->count)) {
sem->sleepers = 0;
break;
}
...
}
为什么说:如果(sleepers - 1 + sem->count)非负,则说明semaphore已经被释放,可以从循环里返回?
望不吝赐教,谢谢!