Как контролировать порядок выполнения потока в 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();
}
}