c - C11 stdatomic and calloc -
i've got structure contains atomic field:
#include <stdatomic.h> struct s { ... atomic_int a; }; this structure allocated calloc:
struct s *p = calloc(1, sizeof(struct s)); is portable expect p->a initialised 0? there enough barriers in code weakly consistent initialisation fine, initial value guaranteed 0?
no, not portable in general. calloc guarantees byte-wise 0 value of underlying object. types (may) have state not equivalent initialization. definitively have use atomic_init put object valid state.
the reason platforms hold "lock" in addition base object because don't implement corresponding assembler instruction. portable need use atomic_var_init or atomic_init atomic objects not statically allocated.
that said, don't know of existing platform need such cruft atomic_int. if platform has atomic_int_lock_free set 2 , sizeof(atomic_int)==sizeof(int), can relatively sure strategy works. test in _static_assert.
Comments
Post a Comment