原子地访问两个标量字段

时间:2014-12-09 13:06:25

标签: c pthreads atomicity c11

在多线程(Linux / amd64,Pthreads,C11)应用程序中,我有structmonimelt.h中的momitem_st),其中包含两个字段

uint16_t i_paylkind;
void* i_payload;

(如果需要,我可以将i_paylkind的类型更改为其他整数类型,例如uintptr_tatomic_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 +软件相关的问题)

1 个答案:

答案 0 :(得分:4)

如果您确实有C11编译器,_Atomic限定符适用于任何数据类型。只是使用它。对于struct类型,您唯一能做的就是加载和存储,遗憾的是,您无法访问各个成员。