Для обычного двоичного семафора
задача пытается синхронизироваться с
внешнее событие создает пустое
семафор .... Второе задание, которое
контролирует событие синхронизации
дает семафор, когда его нет
больше нужно.
#include "vxWorks.h"
#include "semLib.h"
#define T_PRIORITY 50
SEM_ID syncExampleSem; // named semaphore object
void initialize (void)
{
// set up FIFO queue with emtpy binary semaphore
syncSem = semBCreate (SEM_Q_FIFO, SEM_EMPTY);
// create task1
taskSpawn ("task1", T_PRIORITY, 0, 10000, task1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
// create task2
taskSpawn ("task2", T_PRIORITY, 0, 10000, task2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
void task1 (void)
{
// stay here until semaphore becomes available
semTake (syncExampleSem, WAIT_FOREVER);
// do something
}
void task2 (void)
{
// do something
// now let task1 execute
semGive (synExampleSem);
}
Мой вопрос: почему я не вижу первую задачу по созданию пустого семафора, как описано? (Похоже, что это делается «в общем» в основной функции?) «задача, пытающаяся синхронизироваться с внешним событием, создает пустой семафор».
Кроме того, я не вижу, как вторая задача «контролирует» синхронизацию?
Спасибо.
См .: Пример синхронизации через двоичный семафор
http://www.cross -comp.com / инстр / страницы / встроенный / VxWorksTutorial.aspx # VxWorks% 20Programming