当一个任务要进入资源,首先要得到一个信号量(take that semaphore),只要有任务在使用这个信号量,其它的要进入资源的任务要停止执行(blocked from execution),当这个任务完成了对资源的使用,它会释放信号量,允许另一个任务来使用资源。
semTake (semMutex, WAIT_FOREVER);
semTake (semMutex, WAIT_FOREVER);
. . critical region, only accessible by a single task at a time
semGive (semMutex);
同步协调进程(Synchronization)
semBCreat(SEM_Q_FIFO,SEM_EMPTY), SEM_EMPTY 指明用于任务间同步.
#include "vxWorks.h"
#include "semLib.h"
SEM_ID syncSem;
init ( int someIntNum )
{
intConnect (INUM_TO_IVEC (someIntNum), eventInterruptSvcRout, 0);
syncSem = semBCreate (SEM_Q_FIFO, SEM_EMPTY);
taskSpawn ("sample", 100, 0, 20000, task1, 0,0,0,0,0,0,0,0,0,0);
}
task1 (void)
{ ...
semTake (syncSem, WAIT_FOREVER);
printf ("task 1 got the semaphore\n");
...
}
eventInterruptSvcRout (void)
{ ...