我有一个多线程应用程序,它必须在SMP环境中运行,我在这里编写(没有读 - 修改 - 写)来自多个线程的单(或字长)字节全局内存。我可以在不使用任何同步机制(互斥,信号量,自旋锁)的情况下执行此操作吗?
我的猜测是:CPU对内存的读/写内存是原子的。所以不需要锁定原子访问内存。
但存在内存排序问题,即CPU的内存可见性顺序可能与访问内存不同。要解决这个问题,我们需要内存屏障指令。我们可以在用户空间代码中使用内存屏障指令吗?如果没有,为了解决内存排序问题,我们必须使用murtex或spinlock?
答案 0 :(得分:2)
GCC
提供内置__sync_synchronize()
来执行完整的内存屏障。
请注意,某些体系结构(如Alpha)无法在硬件级别执行读取/修改/写入周期时写入单个字节。