使用多处理器使代码运行一次

时间:2017-05-03 09:40:37

标签: c

我想要完成的伪代码:

//gets current running digital singal processor
int dsp_id = get_dsp_id();
if (dsp_id == 0) {
 //code run only once
 //irq start all other dsps including dsp_id 0
} else {
   //code run multiple times
}

问题是,当我向所有dsps发送启动irq,包括id 0,我一遍又一遍地进入if statetment,我试图用全局静态bool标记它但是没有用。

1 个答案:

答案 0 :(得分:1)

你有竞争条件。我想你启动的其他线程在设置全局变量之前会遇到if语句。您需要使用互斥锁来保护锁。在伪代码中,这将类似于

if (dsp_id == 0) {
    get mutex lock
    if (!alreadyRun)
    {
        //code run only once
        //irq start all other dsps including dsp_id 0
        set alreadyRun to true
    }
    release mutex lock
} else {
    //code run multiple times
}

其中alreadyRun是你的布尔变量。顺便说一句,你不能只写alreadyRun = true,因为如果处理器的缓存没有被刷回主存储器,则无法保证其他处理器会看到更改。您的线程库将具有相应的功能来执行互斥锁定并安全地设置alreadyRun。例如,C11在stdatomic.h中为threads.h

中的标志和互斥函数定义原子类型和操作