在uint8_t(C)中以原子方式存储值
发布时间:2020-12-14 02:16:03 所属栏目:Windows 来源:网络整理
导读:假设我们有一个包含uint8_t字段的C结构: typedef struct foo_s { uint8_t field; // other fields...} foo_t; 如果我们想使用特定的内存顺序以原子方式在字段中存储值,那么C语言中的可能性是什么?从我的研究 C11 standard不允许非原子整数类型的原子库(ato
假设我们有一个包含uint8_t字段的C结构:
typedef struct foo_s { uint8_t field; // other fields... } foo_t; 如果我们想使用特定的内存顺序以原子方式在字段中存储值,那么C语言中的可能性是什么?从我的研究 > C11 standard不允许非原子整数类型的原子库(atomic_store_explicit).最重要的是,标准中没有原子整数类型,保证宽度为一个字节. 所以我们问题的解决方案似乎超出了C标准…是否有任何常用的机制来原子地存储一个字节? 请注意,我们无法更改字段类型,因为它属于第三方库. 解决方法
在GCC中,要求的原子存储可以使用__atomic_store_n来实现,它包含在Atomics扩展中,并且在一个字节的粒度级别上工作.原子内置的GCC
documentation声明“GCC允许任何长度为1,2,4或8个字节的整数标量或指针类型”.查看
implementation显示HW存储以4字节粒度工作,但SW将通过使用比较和交换操作来模拟字节存储(即,确保对字中任何其他字节的并发修改不会丢失).
我的理解是原子修改可以在任何整数变量(如field)中工作 – 不需要更改其类型或修饰符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-phone-8 – Windows Phone 8应用程序的临时分发
- windows – 如何防止MsDepSvc.exe启动?
- 使用Windows身份验证与php?
- windows-8 – 解锁-bde应用程序未找到错误在Windows 8中普遍
- windows-7 – 通过串行电缆的PPP连接适用于WindowsXP,但在W
- Windows环境下搭建SVN服务器
- windows-server-2008 – 如果在任务调度程序中禁用Windows任
- windows-server-2012-r2 – 使用SAN创建双节点Hyper-V故障转
- 配置 – .net核心,n层应用程序,服务层应该依赖于Microsoft.
- Windows Lua可执行
推荐文章
站长推荐
热点阅读