SMP中的多个线程单字节写入而不使用锁

时间:2013-03-06 12:02:24

标签: multithreading pthreads mutex

我有一个多线程应用程序,它必须在SMP环境中运行,我在这里编写(没有读 - 修改 - 写)来自多个线程的单(或字长)字节全局内存。我可以在不使用任何同步机制(互斥,信号量,自旋锁)的情况下执行此操作吗?

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

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

1 个答案:

答案 0 :(得分:2)

GCC提供内置__sync_synchronize()来执行完整的内存屏障。

请注意,某些体系结构(如Alpha)无法在硬件级别执行读取/修改/写入周期时写入单个字节。