gpt4 book ai didi

C 中位域的并发更新

转载 作者:行者123 更新时间:2023-12-05 00:10:00 26 4
gpt4 key购买 nike

C 标准的第 3.15.3 节规定:

"it is not safe to concurrently update two non-atomic bit-fields in the same structure if all members declared between them are also non-zero-length bit-fields, no matter what the size of those intervening bit-fields happen to be."



考虑下面的例子:
struct S {
unsigned a: 8;
unsigned b: 4;
unsigned c: 4;
unsigned d: 8;
};

基于标准,更新位域是不安全的 ad同时。

为什么不?

最佳答案

位域不能单独寻址,因此要设置位域,编译器使机器代码:

  • 读取包含要设置的位的字节
  • 在该字节中设置所需的位
  • 写回整个字节。

  • 有时这是在一条指令中完成的,但处理器会做同样的工作。

    无论哪种方式,如果另一个线程同时在同一字节的其他位上做同样的事情,那么这两个线程的操作可能会相互干扰。

    另请注意:您不能依赖于访问单位是一个字节,它可以是一个整体 intunsigned , 例如。

    关于C 中位域的并发更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59063315/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com