Defining Semaphores
Defining Semaphores
What is a Semaphore ?
Consider a situation where there are two person who wants to share a bike. At one time only one
person can use the bike. The one who has the bike key will get the chance to use it. And when
this person gives the key to 2nd person, then only 2nd person can use the bike.
Semaphore is just like this Key and the bike is the shared resource. Whenever a task wants
access to the shared resource, it must acquire the semaphore first. The task should release the
semaphore after it is done with the shared resource. Till this time all other tasks have to wait if
they need access to shared resource as semaphore is not available. Even if the task trying to
acquire the semaphore is of higher priority than the task acquiring the semaphore, it will be in
wait state until semaphore is released by the lower priority task.
Use of Semaphore
1. Task Synchronization
Apart from managing shared resource, task synchronization can also be performed with
the help of a semaphore. In this case semaphore will be like a flag not key.
1. Unilateral Rendezvous
This is one way synchronization which uses a semaphore as a flag to signal another task.
1. Bilateral Rendezvous
1. Binary Semaphore
1. Counting Semaphore
To handle more then one shared resource of same type, counting semaphore is used.
1. Create
2. Acquire
3. Release
API Details
To create semaphore
{{#Widget:LibTable}}
Defination vSemaphoreCreateBinary( xSemaphoreHandle xSemaphore)
To release semaphore
{{#Widget:LibTable}}
Defination xSemaphoreGive( xSemaphoreHandle xSemaphore )