Semaphore acquisition There are three functions to acquire a semaphore: void down(struct semaphore *sem); Blocks (uninterruptible) until sem is available int down_interruptible(struct semaphore *sem); Blocks until sem is available Can be interrupted by signals Non-zero return indicates signal Semaphore *not* acquired This form should usually be used int down_trylock(struct semaphore *sem); Will acquire semaphore if available But will not sleep Return value of zero indicates success