Für eine gewöhnliche Binärsemaphore, eine Aufgabe einem externes Ereignis zu synchronisieren versuchen, erstellt eine leere Semaphore .... Eine zweite Aufgabe, die steuert das Synchronisationsereignis die Semaphore gibt, wenn es nicht mehr benötigt wird .Welche Aufgabe soll in diesem Beispiel erstellt werden?
#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);
}
Meine Frage ist, warum ich nicht die erste Aufgabe sehe die leeren Semaphore erstellen, wie beschrieben? (Es sieht so aus, als wäre es nur "generisch" in der Hauptfunktion?) "eine Aufgabe, die versucht, mit einem externen Ereignis zu synchronisieren, erstellt einen leeren Semaphor".
Auch ich sehe nicht wirklich, wie die zweite Aufgabe ist, die Synchronisation zu "kontrollieren"?
Vielen Dank.
Siehe: Beispiel für die Synchronisation über binäre Semaphore
http://www.cross-comp.com/instr/pages/embedded/VxWorksTutorial.aspx#VxWorks%20Programming
Ich fragte mich auch über diese erste Linie danke. Bezüglich des Semaphors, der in Aufgabe 1 oder 2 erstellt wird, sehe ich das Problem, das Sie beschrieben haben. Bedeutet dies, dass der Wortlaut in diesem Beispiel falsch ist, oder sehe ich es falsch an? –
Das Beispiel ist im Vergleich zum Code schlecht formuliert. Nach meiner Erfahrung werden Semaphoren fast immer außerhalb der Aufgaben initialisiert, die sie verwenden, es sei denn, Sie haben eine spezielle Situation, bei der eine Aufgabe aus einer anderen hervorgeht. –