gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:21:00 25 4
gpt4 key购买 nike

假设我有一个由两个 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 separatememory locations, and can be modified concurrently without interfering with each other. The bit-fields band c together constitute the fourth memory location. The bit-fields b and c cannot be concurrentlymodified, but b and a, for example, can be.


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

关于c - 如果两个任务尝试同时访问结构的不同部分(在 c 中)会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66349872/

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