如何在NXC中控制线程的执行顺序?

时间:2012-09-10 13:08:16

标签: thread-synchronization nxc

我想在抢占式线程调度环境中编写一个并行程序,我可以使用互斥锁(总是初始化为未采用的二进制互斥锁),等待指令,以及线程协作指令(产生于线程中的另一个任务)同步我的线程,但没有任何信号量机制可用(实际上,我正在用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);
    }
 }

1 个答案:

答案 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();
    }
}