一直对volatile没有很明确知道用途
查一些资料 多半都是举例用volatile让compiler不会对他最佳化 让他不要拿cache数值
但这实在有点抽象, 实际上如果要使用 有没有更具体一点的使用情境呢?
之前有听到一个说法 想请问各位是否有错
假设有个global变量 int a;
两条thread都会去r/w这个a
假设我能确定这两个thread执行的时候完全是互斥(我没有用任何sync手段)
如
int a;
int main(){
a = 1;
std::thread t([](){cout<<a<<endl;};
}
乍看这两条thread绝对无overlap
但我是不是也不能保证取得的a 值是正确的?
如果不能保证
是不是volatile int a;就能解这个问题?
另外就是如果我用mutex来手动让它互斥, 为什么就能保证取得的值正确呢?
如果我土炮写一个 spin lock来做互斥(没有使用系统提供任何API单纯while spin)
是不是也可能没办法保证能解决"取得正确的值"这件事(非要使用系统的api才能?)
如果以上观念大致正确,
是不是之后看到有人写code 没有用mutex or atomic 而是说
这两条thread不会同时执行, 这讲法本身就是有破绽的"吗
以上是我的盲点, 请各位给一点关键字让我可以去搜寻一下
建立一下观念
或是给予一些指证
谢谢