C 11内存模型是否可以防止内存撕裂和冲突?

C 11内存模型是否可以防止内存撕裂和冲突?,第1张

概述阅读C 11草案我对第1.7.3条感兴趣: A memory location is either an object of scalar type or a maximal sequence of adjacent bit-fields all having non-zero width. … Two threads of execution (1.10) can update and acce 阅读C 11草案我对第1.7.3条感兴趣:

A memory location is either an object of scalar type or a maximal sequence of adjacent bit-fIElds all having non-zero wIDth. … Two threads of execution (1.10) can update and access separate memory locations without interfering with each other.

本条款是否保护免受硬件相关的竞争条件,例如:

>未对齐的数据访问,在两个总线事务中更新内存(内存撕裂)?
>在系统内存单元中有不同对象的地方,例如:一个32位字中的两个16位有符号整数,并且每个独立对象的独立更新都需要写入整个存储单元(内存冲突)?

@H_403_12@解决方法 关于第二点,该标准保证在那里不会有比赛.话虽这么说,有人告诉我,这种保证并没有在当前的编译器中实现,甚至可能无法在某些架构中实现.

关于第一点,如果第二点得到保证,并且如果你的程序不包含任何竞争条件,那么自然结果是这也不是竞争条件.也就是说,鉴于标准保证写入不同子字位置是安全的前提,那么唯一可以具有竞争条件的情况是多个线程访问相同的变量(跨越单词,或者更可能是这对于缓存行而言是有问题的).

这可能很难甚至不可能实现.如果未对齐的数据通过缓存行,则几乎不可能保证代码的正确性而不会给性能带来巨大的成本.你应该尽量避免使用未对齐的变量以及其他原因(包括原始性能,对触及两个缓存行的对象的写入涉及将多达32个字节写入内存,以及任何其他线程是否触及任何缓存行,它还涉及缓存同步的成本……

总结

以上是内存溢出为你收集整理的C 11内存模型是否可以防止内存撕裂和冲突?全部内容,希望文章能够帮你解决C 11内存模型是否可以防止内存撕裂和冲突?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1242987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存