プリエンプティブ スレッド スケジューリング環境で並列プログラムを作成したいのですが、ミューテックス (常に取られないように初期化されるバイナリ ミューテックス)、待機命令、およびスレッド協調命令 (スレッド内の別のタスクへの譲歩) を使用して同期することができます。しかし、利用可能なセマフォ メカニズムはありません (実際、私はLego Mindstorm 用のNXCプログラミング言語でプログラムを書いています)。
2 つのスレッドAとBでプログラムを作成し、(ABABAB ...) のような実行順序を生成する方法はありますか? [2 つの関数 A() と B() を呼び出すループを含む 1 つのスレッドを持つようなものですが、ここではマルチスレッド方式です]
セマフォがあれば、次のようにすると思います。
semaphore SemA = 1, SemB=0;
//in A
{
while(true)
{
down(SemA);
//Do the things
up(SemB);
}
}
//in B
{
while(true)
{
down(SemB);
//Do the things
up(SemA);
}
}