锁定VS内存障碍

时间:2016-08-01 09:46:55

标签: multithreading memory synchronization locks memory-barriers

何时使用内存屏障可以避免锁定?就像在这种情况下:Consumer-Producer-Wiki(最后一个实现使用内存屏障,其余都使用锁或信号量。)

在这种情况下使用内存屏障比锁更好吗?如果是,为什么?

使用内存屏障可以避免锁定的最常见情况是什么?

1 个答案:

答案 0 :(得分:-1)

根据定义,互斥锁需要执行内存屏障。如果互斥锁没有包含内存屏障,则对其提供独占访问权限的数据的操作可以在关键区域之外重新排序。

另外,互斥锁实现通常需要自己执行内存屏障,否则互斥锁本身可能会被重新排序。

换句话说,互斥体的实现包括一个内存屏障,以便执行强制互斥所必需的原子锁定,但即使它不需要,互斥锁也会包含一个内存屏障,否则就不会出现内存障碍。 ;非常有用。

结论:如果您不希望代码中断,请在任何地方使用锁定,即使需要内存屏障也是如此。

inline void mb_()
{
    mutex_t mtx;
    mutex_init(&mtx);
    mutex_lock(&mtx);
    mutex_unlock(&mtx);
}

如果您的目标是性能,则可能需要先进的技术。