如果两个任务试图同时访问结构的不同部分(在 c 中),会发生什么情况?

What happens if two tasks try to access different parts of a struct at the same time (in c)?

假设我有一个包含两个类型 mystruct_t:

的结构的数组
    typedef struct {
      uint16_t member1;
      bool member2;
    } mystruct_t;
    mystruct_t my_array[2];

如果两个任务试图同时访问这个数组的不同部分会发生什么?如果一个任务试图访问 my_array[0] 而另一个任务试图访问 my_array[1],这会产生竞争条件吗?

如果两个任务试图同时访问结构的不同部分会发生什么?如果一个任务试图访问 my_array[0].member1 而另一个任务试图访问 my_array[0].member2,这会产生竞争条件吗?

更新:我使用的是 c99 版本。

竞争条件意味着两个任务(线程)会根据顺序获得不同的行为。这只有在一个或两个任务正在写入(而不是只读)到同一位置(C11)时才会起作用。每 section 3.14 memory location:

NOTE 1 Two threads of execution can update and access separate memory locations without interfering with each other.

NOTE 2 [...]

EXAMPLE A structure declared as

    struct {
            char a;
            int b:5, c:11, :0, d:8;
            struct { int ee:8; } e;
    }

contains four separate memory locations: The member a, and bit-fields d and e.ee are each separate memory locations, and can be modified concurrently without interfering with each other. The bit-fields b and c together constitute the fourth memory location. The bit-fields b and c cannot be concurrently modified, but b and a, for example, can be.

对于读取(以及写入),由于缓存一致性,您可能仍会受到性能影响。