【问题标题】:How to control thread's execution order in NXC?如何控制NC中的线程执行顺序?
【发布时间】:2012-09-03 08:41:34
【问题描述】:

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

有没有什么方法可以编写一个有两个线程AB的程序,并生成一个执行顺序,比如(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);
    }
 }

【问题讨论】:

  • 您可以使用priority 语句(或者它是编译器指令?)来帮助确定每个进程的优先级。您可以使用“主线程”和一些互斥锁来控制执行哪些线程。
  • 另外,请尝试在 Mindboards 论坛上提问。

标签: thread-synchronization nxc


【解决方案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();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 2012-04-23
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多