static void stm_grab(struct stm_object *obj) { rwlock_rlock(&obj->lock); int ref = ATOM_FINC(&obj->reference); rwlock_runlock(&obj->lock); assert(ref > 0); }
uint32_t crb_set(Crb_t* rcb, void* data ) { uint32_t curr = ATOM_FINC(&rcb->curr); uint32_t index = curr & (rcb->size - 1); memcpy(rcb->data[index], data, rcb->msize); return curr; }
static struct stm_copy * stm_copy(struct stm_object *obj) { rwlock_rlock(&obj->lock); struct stm_copy * ret = obj->copy; if (ret) { int ref = ATOM_FINC(&ret->reference); assert(ref > 0); } rwlock_runlock(&obj->lock); return ret; }