### Semaphores

SEMAPHORES:

A semaphore is an integer variable that apart from initialisation is accessed only through two standard atomic operators.

In two processes, critical section solution can be possible using Peterson's Solution.

But an operating system is a n process system (many process system) so Semaphore solution is used here. Because Semaphore gives n process solution.

Semaphores are simple integer variables, as many people gets confusion as it is a separate data type or data structure so no, it's an integer variable only.

We use “int S”  to show semaphore.
But don't be confuse we can use any thing like int a, int b etc to show semaphore.
Its seems easy to show Semaphore using “S” so we use “int S”.

int S = 1; (this is known as initialisation as well as declaration)
Here initialisation of Semaphore shows that which problem you wants to solve by Semaphore.
We use “int S=1” so problem 1 will get solved in critical section.

And it's important to know that when we solve critical section problem using Semaphore we initialise S with 1.

If once we initialised it than we cant access it again. It can be accessed only by-
1) Wait (S) //Read as  wait of S
2) Signal (S) // Read as signal of S

1) Wait(): this is a simple atomic operation, which reduces the value of S by 1. It means whatever the value of S, wait () will do a single decrement.
For example:
If S = 3,
Than wait() will just reduces it to S=2.

Wait (S)
{
While (S ≤ 0);
S = S-1;
}

See in above code while loop is a type of trap only which makes program to check again and again whether value of S is greater than zero.
If value of S is greater than zero, so wait(S) can make a single decrements in it.

2) Signal(): this is a simple atomic operation, which increases the value of S by 1. It means whatever the value of S, Signal () will do a single increment.
For example:
If S = 3,
Than Signal() will just increases it to S=4.

Signal (S)
{
S = S+1;

}