1 /******************************************************************************
4 * Interface definitions for software transactional memory (STM).
6 * Copyright (c) 2002-2003, K A Fraser
12 typedef struct stm_st stm;
13 typedef struct stm_blk_st stm_blk;
14 typedef struct stm_tx_st stm_tx;
16 stm *new_stm(ptst_t *ptst, int blk_size);
17 void free_stm(ptst_t *ptst, stm *mem);
19 stm_blk *new_stm_blk(ptst_t *ptst, stm *mem);
20 void free_stm_blk(ptst_t *ptst, stm *mem, stm_blk *b);
21 void *init_stm_blk(ptst_t *ptst, stm *mem, stm_blk *b);
22 int sizeof_stm_blk(ptst_t *ptst, stm *mem, stm_blk *b);
24 stm_tx *new_stm_tx(ptst_t *ptst, stm *mem, sigjmp_buf *penv);
25 bool_t commit_stm_tx(ptst_t *ptst, stm_tx *t);
26 bool_t validate_stm_tx(ptst_t *ptst, stm_tx *t);
27 /* NB. Must still call commit after abort, but it's guaranteed to fail. */
28 void abort_stm_tx(ptst_t *ptst, stm_tx *t);
30 void *read_stm_blk(ptst_t *ptst, stm_tx *t, stm_blk *b);
31 void *write_stm_blk(ptst_t *ptst, stm_tx *t, stm_blk *b);
33 void remove_from_tx(ptst_t *ptst, stm_tx *t, stm_blk *b);
35 void _init_stm_subsystem(int pad_data);
37 #define new_stm_tx(_tx, _ptst, _mem) \
41 (_tx) = new_stm_tx((_ptst), (_mem), &env); \