0

我有一个多线程应用程序,它必须在 SMP 环境中运行,我正在从多个线程写入(无读取-修改-写入)到单个(或字长)字节全局内存。我可以在不使用任何同步机制(互斥量、信号量、自旋锁)的情况下做到这一点吗?

我的猜测是:CPU 对对齐内存的内存读/写是原子的。所以不需要锁定原子访问内存。

但是存在内存排序问题,即内存对 CPU 的可见性顺序可能与访问内存的顺序不同。为了解决这个问题,我们需要内存屏障指令。我们可以在用户空间代码中使用内存屏障指令吗?如果不是,要解决内存排序问题,我们必须使用 murtex 或 spinlock 吗?

4

1 回答 1

2

GCC提供了一个内置函数__sync_synchronize()来执行完整的内存屏障。

请注意,某些架构(如 Alpha)如果不在硬件级别执行读/修改/写周期,就无法写入单个字节。

于 2013-03-07T00:16:42.790 回答