假设有一个包含两个结构体的数组,类型为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)时才会起作用。Per section 3.14内存位置
说明1两个执行线程可以在不相互干扰的情况下更新和访问不同的内存位置。
注2[…]
一个结构体声明为struct { char a; int b:5, c:11, :0, d:8; struct { int ee:8; } e; }
包含四个独立的内存位置:成员a、位域d和位域ee分别是独立的内存位置,并且可以并发地修改而不会相互干扰。位域b和c一起构成了第四个存储位置。位字段b和位字段c不能同时存在修改,但b和a,例如,可以。
对于读(以及写),由于缓存一致性,您仍然可能会受到性能影响。