在多线程(Linux / amd64,Pthreads,C11)应用程序中,我有struct
(monimelt.h中的momitem_st
),其中包含两个字段
uint16_t i_paylkind;
void* i_payload;
(如果需要,我可以将i_paylkind
的类型更改为其他整数类型,例如uintptr_t
或atomic_uint
)
FWIW,i_paylkind
是一个判别式,用于定义struct
指向的实际i_payload
运行时类型。
是否可以原子方式访问这两个字段(w.r.t。其他线程访问相同的struct
)。当然我也有pthread_mutex_t i_mtx;
在同一个结构中,我可以锁定(使用pthread_mutex_lock
)。但出于性能原因,我可能希望避免这种情况(也许transactional memory可能是相关的)
看起来<stdtomic.h>
没有为此提供任何机制。
(与我的MELT monitor GPLv3 +软件相关的问题)
答案 0 :(得分:4)
如果您确实有C11编译器,_Atomic
限定符适用于任何数据类型。只是使用它。对于struct
类型,您唯一能做的就是加载和存储,遗憾的是,您无法访问各个成员。