On Sat, 17 Dec 2005, Nicolas Pitre wrote: > > Now if you don't disable interrupts then nothing prevents an interrupt > handler, or another thread if kernel preemption is allowed, to come > along right between (2) and (4) to call up() or down() which will > make the sem count inconsistent as soon as the interrupted down() or > up() is resumed. >
Well, the one thing that is preventing this is the fact that interrupts don't call up and down, since down can schedule. Now they might do a down_trylock, but then if it would succeed, it would most likely call the up. So the semaphore would be back to what it was before the interrupt took place. But you do have a case about preemption. -- Steve
