gpt4 book ai didi

c - 确保一个 cpu 在另一个 cpu 读取 "double"之前写入了 "double"?

转载 作者:可可西里 更新时间:2023-11-01 11:43:37 26 4
gpt4 key购买 nike

我打算在双核 ARM Cortex-A9 CPU 上运行一个操作系统(一个内核运行 Linux,另一个没有操作系统)。

在非操作系统端,我们将 64 位 double 写入 DDR 内存,然后 Linux 端读取它。

因为 CPU 有一个到 DDR 的 32 位总线,值在两个总线周期内传输,这意味着如果在总线上混合读写,值可能会被破坏。

我该怎么做才能让它以安全的方式工作?

最佳答案

您没有具体说明您的订购要求是什么或您打算如何发出更改信号 - 所以我将简单地回答问题:

如果在 64 位对齐位置上执行,LDREXD/STREXD 指令保证是单副本原子的(如果位置不是,它们将中止)。如果你正在做一些无锁的事情,那可能对你有好处。如果没有,只需使用互斥锁实现即可。

当然,LDREXD/STREXD 只有在满足以下任一条件时才能正常工作:

  • Linux 和您的其他软件都启用了缓存,两个 cpu 都设置了“SMP”位,并且都将共享区域映射为可回写缓存。

  • Linux 和您的其他软件都将共享区域视为未缓存,并且您的 SoC 为内存设备实现了一个全局监视器

关于c - 确保一个 cpu 在另一个 cpu 读取 "double"之前写入了 "double"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com