When a process finishes using a resource, it needs to release it and wake up any waiting processes. We need an atomic operation that increments the semaphore.
The signal() operation (V operation) increments the semaphore value atomically. If there are waiting processes (S ≤ 0), one is woken up.
- Atomically increment semaphore value: S = S + 1
- If S ≤ 0 after increment: a process was waiting, wake it up
- If S > 0 after increment: no one was waiting
- Woken process can now acquire the resource
- Must be atomic (no interruption)
- Wakes up at most one waiting process
- Releases resource back to pool
- Also called V (verhogen = to release) or up operation
- Built from: Semaphore
- Builds into: Binary Semaphore, Counting Semaphore
- Related: Wait Operation, Critical Section
- Contrasts with: Wait Operation (increment vs decrement)
- Calling signal() without holding resource is a bug
- Must be atomic — can’t be interrupted
- Forgetting signal() causes deadlock (resource never released)