use*_*046 5 c multithreading gcc atomic memory-model
假设我们有一个包含uint8_t字段的C结构:
typedef struct foo_s {
uint8_t field;
// other fields...
} foo_t;
Run Code Online (Sandbox Code Playgroud)
如果我们想要field使用特定的内存顺序以原子方式存储值,那么C语言中的可能性是什么?从我的研究
atomic_store_explicit)在非原子的整数类型.最重要的是,标准中没有原子整数类型,保证宽度为一个字节.atomic_thread_fence)然后存储值field.但是标准要求这个商店是原子的,以便围栏按预期工作,所以我们回到上一个项目中描述的问题.所以我们问题的解决方案似乎超出了C标准...是否有任何常用的机制来原子地存储一个字节?
请注意,我们无法更改类型field,因为它属于第三方库.
Dou*_*rie -1
由于字节序和对齐问题,它不可移植,但您可以将另一个联合结构别名为该foo_t结构。别名联合结构将有一个原子大小的字段,与整个uint8_t field. 现在您可以自动更新重叠字段。由于它与字段重叠,因此也将自动更新。
通过别名联合结构我的意思是
typedef union alias_foo_u
{
foo_t orig_foo;
struct alias_foo_s
{
atomic_t field_overlap;
...
} alias_foo;
} alias_foo_t;
Run Code Online (Sandbox Code Playgroud)