我想在抢占式线程调度环境中编写一个并行程序,我可以使用互斥锁(总是初始化为未采用的二进制互斥锁),等待指令,以及线程协作指令(产生于线程中的另一个任务)同步我的线程,但没有任何信号量机制可用(实际上,我正在用Lego Mindstorm的 NXC 编程语言编写我的程序)。
有没有办法用两个线程 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);
}
}
答案 0 :(得分:0)
不确定它是否可行,但您可以尝试使用单个互斥锁和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();
}
}