Semaphore Task Synchronization
The Linux semaphore example is similar to a push button light
switch, using an LED for the light, as was the case in the eCos
semaphore example. There are two tasks in this example: a producer and a
consumer. The producer task, producerTask, monitors the button labeled SW0
on the Arcom board’s add-on module. Figure 11-1 in Chapter 11 shows the
button used in this example.
When the SW0 button is pressed, the producer task signals the
consumer task using a semaphore. The consumer, consumerTask, waits for the semaphore signal
from the producer task; once received, the consumer task outputs a
message and toggles the green LED.
The main function first
initializes the LED by calling ledInit. Next, the semaphore is initialized
with a call to sem_init. The initial
value of the semaphore, semButton, is
set to zero by the last parameter so that the consumer task that is
waiting does not execute until the semaphore is signaled by the producer
task. The second parameter notifies the operating system that this
semaphore may be used by this process only. Lastly, the two tasks are
created and a message is output signifying the start of the
program.
#include <stdio.h> #include <pthread.h> #include <semaphore.h> #include "led.h" sem_t semButton; /********************************************************************** * * Function: main * * Description: Main routine for the Linux semaphore example. This * function creates the semaphore and then the increment * and decrement ...