多核处理器上的共享内存和并发性?

时间:2016-12-14 16:11:48

标签: concurrency multicore

我正在设计一个基于ADI公司的ADSP-SC589的应用程序,它包括两个SHARC +内核和一个ARM Cortex A5。

位于L2上的共享内存空间可供任何内核使用。我试图弄清楚不同的内核如何防止在读取/写入多字节数据期间数据损坏。

例如,如果我想写一个64位值(两个不同的写入)。我必须告诉其他核心在它准备好之前不读取该值。换句话说,我必须在很短的时间内锁定这个记忆区域。

由于每个核心在自己的循环中以不同的速度运行,我无法想象任何基于中断的解决方案。我还没有在处理器上找到任何允许锁定/解锁某个内存区域的 magic 外设,导致其他内核管道上的停顿(我可能没有使用正确的关键字来查找这个神奇的功能)。

我想象的天真解决方案是:

#define CORE0 (1<<3) // Highest priority
#define CORE1 (1<<2) 

while((interlock.request |= CORE0) > CORE0); 
foo = sharedmemory.foo;
bar = sharedmemory.bar;
interlock.request &= ~CORE0;

不幸的是,interlock.request |= CORE0涉及就绪和写入访问,因此如果没有对共享内存的真实或/和操作,此解决方案将无法工作。实施Dekker算法似乎是最好的解决方案,但它看起来很耗费资源。

这类问题的典型使用方法是什么?

我确信3核处理器必须具有基于硬件的互斥锁。 ISN&#39;?吨

0 个答案:

没有答案