A、B、Cの3つのスレッドがあり、QNXリアルタイムオペレーティングシステムのC ++でシーケンスA、B、B、C、C、C、B、B、Aをスケジュールしたいと考えています。私のアプローチは、セマフォを使用して、最後に実行されたスレッドを保存することです(B->CおよびB->Aのため):
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
/*semaphores*/
sem_t sa = 1;
sem_t sb = 0;
sem_t sc = 0;
char last; //remember the last processed thread
void* threadA (void* a)
{
while(1)
{
sem_wait(&sa); //p(sa)
printf("threadA \n"); //threads function
last = 'A'; //mark A as last processed
sem_post(&sb); //v(sb)
}
}
void* threadB (void* a)
{
int c = 1;
while(1)
{
printf("threadB\n");
if (c == 2)
{
sem_wait(&sb);
c = 1;
if (last == 'A')
{
last = 'B';
sem_post(&sc);
}
if (last == 'C')
{
last = 'B';
sem_post(&sb)
}
}
c++;
}
}
void* threadC (void* a)
{
int c = 1;
while(1)
{
printf("threadC \n");
if (c == 3)
{
sem_wait(&sc);
c = 1;
last = 'C';
sem_post(&sb);
}
c++;
}
}
int main()
{
pthread_create (&threadA, NULL, threadA, NULL);
pthread_create (&threadB, NULL, threadB, NULL);
pthread_create (&threadC, NULL, threadC, NULL);
}
残念ながら、QNXがインストールされていないため、コードをテストできません。だから私の質問:これはうまくいくでしょうか、そしてこれを行うためのより良いまたは組み込まれた方法はありますか?