Как контролировать порядок выполнения потока в NXC?

Я хочу написать параллельную программу в вытесняющей среде планирования потоков, и я могу использовать мьютекс (двоичные мьютексы, которые всегда инициализируются как не взятые), инструкции ожидания, а также инструкцию взаимодействия потоков (уступают другой задаче в потоке) для синхронизации моего потоков, но нет никакого семафорного механизма (на самом деле, я пишу свою программу на языке программирования NXC для Lego Mindstorm).

Есть ли способ написать программу с двумя потоками A и B и сгенерировать порядок выполнения, например (A B A B A B ...)? [это похоже на наличие одного потока, содержащего цикл, вызывающий две функции A() и B() - но здесь это происходит в многопоточном режиме]

Если бы у меня был семафор, думаю, я бы сделал это так:

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);
    }
 }

1 ответ

Не уверен, что это будет работать, но вы можете попробовать с одним мьютексом и Yield функция. Если A и B - две единственные задачи, я предполагаю, что они всегда будут переключаться с одной на другую, как и предполагалось, но я не могу проверить, так как у меня больше нет NXT.

mutex sync;
//in A
{
    while(true)
    {
        Acquire(sync);
        //Do the things
        Release(sync);
        Yield();
    }
}
//in B
{
    while(true)
    {
        Acquire(sync);
        //Do the things
        Release(sync);
        Yield();
    }
}
Другие вопросы по тегам