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

Concurrency 多核处理器上的共享内存和并发性?,concurrency,multicore,Concurrency,Multicore,我正在设计一个基于模拟设备的ADSP-SC589的应用程序,其中包括两个SHARC+内核和一个ARM Cortex A5 L2上的共享内存空间可供任何内核使用。我试图弄清楚,在读取/写入多字节数据的过程中,不同的内核如何防止数据损坏 例如,如果我想写一个64位的值(两次不同的写入)。我必须告诉其他内核在准备好之前不要读取该值。换句话说,我必须在短时间内锁定此内存区域 由于每个核心在各自的循环中以不同的速度运行,我无法想象任何基于中断的解决方案。我也没有在处理器上找到任何允许锁定/解锁某个内存区域

我正在设计一个基于模拟设备的ADSP-SC589的应用程序,其中包括两个SHARC+内核和一个ARM Cortex A5

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

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

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

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

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

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

#定义CORE0(1)鉴于ADSP SC584处理器无法使用这些功能,我不知道这些数字是否足够相似,是否意味着您的处理器无法使用这些功能,但该论坛可能是一个提问的地方。这是一个提问的地方,SC589与SC584非常相似。我更感兴趣的是一个通用的解决方案/答案,可能是应用程序ARM提供了负载链接存储条件指令,可用于构造互斥。我不确定SHARC+内核是否适用于ADSP SC584处理器,因为这些函数不适用于ADSP SC584处理器;我不知道这些数字是否足够相似,意味着它们不适用于您的处理器,但在论坛上可能是一个提问的地方。这是一个提问的地方,SC589与SC584非常相似。我更感兴趣的是一个通用的解决方案/答案,可能也适用于其他架构。ARM提供了负载链接存储条件指令,可用于构建互斥。我不确定SHARC+内核