voliate关键字学习

特性一:保证可见性

从硬件层次了解可见性

由于CPU速度和内存速度的差异性,产生了高速缓存cache。有了高速缓存后,CPU处理过程是将需要的内存数据读入缓存,当CPU进行计算时,直接读取高速缓存。在运算完成后,将结果同步到内存中。在多CPU环境中,由于每个线程运行在不同的CPU中,并且每个线程有自己独立的缓存。同一份数据被缓存到多个CPU中,如果不同CPU中缓存的同一份内存值不同,就会导致缓存不一致问题。

由此产生了缓存一致性协议:当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,就会发出信号通知其他CPU,同时其他CPU会在总线上通过嗅探检查自己的缓存是否过期,如果过期将该变量的缓存设置为无效状态。当其他CPU读取这个值的时候,发现是无效状态,就会去内存中重新读取。因此voliate的缓存一致性协议可以保证可见性。

特性二:禁止指令重排

重排序是编译器或者处理器为了优化程序性能而对程序重新排序的一种手段。

voliate会在生成指令序列的合适位置插入内存屏障来禁止指令重排。

特性三:不保证原子性

由于共享变量可见性,各线程在修改共享变量时会通知其他线程将共享变量的值设置为无效,但由于多线程竞争调度,1号线程刚要写入内存就被挂起,2号线程将值写入内存后通知其他线程,由于线程操作极快,还没来得及通知其他线程刚刚挂起的1号线程将值再次写入内存,主内存的值被覆盖,出现丢失写值。

---------------------------------------------------------------------

全部评论

相关推荐

06-27 12:30
延安大学 C++
实习+外包,这两个公司底层融为一体了,如何评价呢?
一表renzha:之前面了一家外包的大模型,基本上都能答出来,那面试官感觉还没我懂,然后把我挂了,我都还没嫌弃他是外包,他把我挂了……
第一份工作能做外包吗?
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务