**Binary Semaphore**

The semaphore construct described in the previous sections is commonly known as a counting semaphore, since its integer value can range over an unrestricted domain. A binary semaphore is a semaphore with an integer value that can range only between 0 and 1. A binary semaphore can be simpler to implement than a counting semaphore, depending on the underlying hardware architecture. We will now show how a counting semaphore can be implemented using binary semaphores. Let S be a counting semaphore.

To implement it in terms of binary semaphores we need the following data structures:

binary-semaphore S1, S2;

int C;

Initially S1 = 1, S2 = 0, and the value of integer C is set to the initial value of the counting semaphore S.

#### The wait operation on the counting semaphore S can be implemented as follows:

wait (S1) ;

C–;

i f (C < 0) {

signal(S1) ;

wait (S2) ;

}

signal(S1);

#### The signal operation on the counting semaphore S can be implemented as follows:

w a i t (S1) ;

C++ ;

i f (C <= 0)

signal (S2) ;

e l s e

signal (S1) ;

also read:-Classic Problems of Synchronisation