假设我们有多个线程在增加一个共同的变量X,并且每个线程都使用互斥锁M进行同步;
function_thread_n(){
ACQUIRE (M)
X++;
RELEASE (M)
}
互斥锁确保只有一个线程在任何时候更新X,但是互斥锁是否确保一旦更新了X的值,其他线程也能看到它呢?假设X的初始值为2;线程1将其增加到3。然而,另一个处理器的缓存可能仍然具有较早的值2,另一个线程仍然可以将值2增加到3。缓存一致性的第三个条件仅要求不同处理器进行的写入顺序保持不变,对吗?
我想这就是内存屏障的作用,如果在释放互斥锁之前使用内存屏障,则可以避免此问题。