n When S.count >=0:  the number of
processes that can execute wait(S) without
being blocked = S.count
n When S.count<0: the number of processes
waiting on S is = |S.count|
n Atomicity and mutual exclusion: no 2
process can be in wait(S) and signal(S) (on
the same S) at the same time (even with
multiple CPUs)
n This is a critical section problem: the
critical sections are the blocks of code
defining wait(S) and signal(S)