Semaphore synchronisation

This example uses semaphores to synchronise execution of two tasks

Task1 send a token to the semaphore

Task 2 waits until it take a token from the semaphore

Note Task1 'produce' the token Task 2 'consumes' the token