1

我想在抢占式线程调度环境中编写一个并行程序,我可以使用互斥锁(二进制互斥锁,始终初始化为未使用)、等待指令以及线程协作指令(屈服于线程中的另一个任务)来同步我的线程,但没有任何可用的信号量机制(事实上,我正在为 Lego Mindstorm 用NXC编程语言编写程序)。

有没有办法用两个线程AB编写程序并生成像 (ABABAB ...) 这样的执行顺序?[这就像一个线程包含一个调用两个函数 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);
    }
 }
4

1 回答 1

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();
    }
}
于 2012-10-17T21:08:21.117 回答