У меня есть 3 потока: A, B и C, и я хочу запланировать последовательность A, B, B, C, C, C, B, B, A на С++ в операционной системе реального времени QNX. Мой подход заключается в использовании семафоров и сохранении последнего выполненного потока (потому что 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. Итак, мой вопрос: будет ли это работать и есть ли лучший или встроенный способ сделать это?