前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DragonOS中的READ_ONCE()宏和WRITE_ONCE()宏

DragonOS中的READ_ONCE()宏和WRITE_ONCE()宏

作者头像
灯珑LoGin
发布2022-10-31 15:43:31
6620
发布2022-10-31 15:43:31
举报
文章被收录于专栏:龙进的专栏

DragonOS中实现了与Linux相似的READ_ONCE()宏以及WRITE_ONCE()宏,主要目的在于解决并行计算场景下,编译器错误的优化导致的数据访问错误的问题。下面进行简单的介绍:

这两个宏主要是为了解决并行访问的问题的。编译器在优化代码的时候,会对一些操作进行重排序,或者删掉一些它认为无用的操作。这些优化在单线程的环境下不存在问题,但是对于操作系统而言,时刻都存在着并行的计算,这样的乱序处理很可能会造成问题。为了保证代码之间不乱序,我们可以使用READ_ONCE()和WRITE_ONCE()宏,告知编译器涉及到的操作之间不能乱序。

主要使用场景

  • 两个进程或者中断处理函数之间的信息交流与沟通
  • 确保编译器不会折叠、旋转或以其他方式对代码进行优化,从而破坏数据访问顺序。

他们之间的区别

细心的小伙伴会发现:对于读取一个变量的值,好像这两个宏都能实现哦!对于这个问题,我们需要回到最开始的出发点:我们到底是要保护哪个操作不被乱序?

阅读这两个宏的源代码之后我们不难发现:

代码语言:javascript
复制
// READ_ONCE能保证变量x的读取操作不被乱序,但不能确保对a[0]、a[1]的写入操作不乱序
a[0] = READ_ONCE(x);
a[1] = READ_ONCE(x);
代码语言:javascript
复制
// WRITE_ONCE能保证对a[0]、a[1]的写入操作不乱序,但不能确保对x的读操作不乱序。
WRITE_ONCE(a[0], x);
WRITE_ONCE(a[1], x);

以上就是对READ_ONCE()和WRITE_ONCE()的简单介绍,如果有任何疑问或意见,可以通过邮件联系我:longjin@RinGoTek.cn

转载请注明来源:https://longjin666.cn/?p=1560

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月4日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主要使用场景
  • 他们之间的区别
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档