通常のバイナリセマフォの場合、外部イベントに同期しようとするタスクは空のセマフォを作成します。同期イベントを制御する2番目のタスクは、不要になったときにセマフォを提供します。
#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);
}
私の質問は、説明されているように、空のセマフォを作成する最初のタスクが表示されないのはなぜですか?(メイン関数で「一般的に」実行されているように見えますか?) 「外部イベントに同期しようとするタスクは、空のセマフォを作成します」。
また、2番目のタスクがどのように同期を「制御」しているのかよくわかりません。
ありがとうございました。
参照:バイナリセマフォによる同期の例
http://www.cross-comp.com/instr/pages/embedded/VxWorksTutorial.aspx#VxWorks%20Programming