C ++缓存可见性

时间:2017-03-07 19:04:58

标签: c++ multithreading

我正在阅读有关C ++多线程的stackoverflow和其他文档,它可能已经在其他一些讨论中得到了回答,但我似乎无法找到一个令人满意的答案,关于C ++如何确保值不仅仅是缓存而且可以被指示为写入主内存,以便其他线程可以读取它。假设我们有以下内容:

int x; 
x = 15;

这15可以存储在CPU缓存中,稍后可以在内存中写出。因此,即使在执行此代码之后,访问x的其他线程也可能正在读取一些旧值。

假设我们有:

atomic<int> x;
x.store(15);

如果我理解正确,这只能确保编译器无法对x上的其他加载/存储操作重新排序的“some”(取决于我们的memory_order标志)。它没有讨论这个15是存储在缓存中还是存储在主内存中或者没有。加载此x的其他线程仍然可以读取过时的值(如果我错了请纠正我)

那么一旦执行存储指令15,我们如何实现它,它被写入主存储器(或者至少在其他CPU缓存中以某种方式标记),以便一些后续读取知道获取新值?

(Java volatile关键字可以做到这一点)

谢谢,

0 个答案:

没有答案