小编Ban*_*kde的帖子

根据CERT编码规则POS49-C访问共享结构中的相邻成员时的竞争条件?

根据CERT编码规则POS49-C,访问相同结构的不同字段的不同线程可能会发生冲突.

我使用常规的unsigned int而不是bit-field.

struct multi_threaded_flags {
  unsigned int flag1;
  unsigned int flag2;
};

struct multi_threaded_flags flags;

void thread1(void) {
  flags.flag1 = 1;
}

void thread2(void) {
  flags.flag2 = 2;
}
Run Code Online (Sandbox Code Playgroud)

我可以看到,即使是unsigned int,仍然可能存在竞争条件IF编译器决定使用加载/存储8个字节而不是4个字节.我认为编译器永远不会这样做,赛车条件永远不会发生在这里,但这完全是我的猜测.

是否有关于此案例的明确定义的汇编/编译器文档?我希望锁定,这是昂贵的,是这种情况恰好未定义的最后手段.

仅供参考,我使用gcc.

c assembly multithreading gcc pthreads

7
推荐指数
1
解决办法
437
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

multithreading ×1

pthreads ×1