tlds
Transactional Operations for Linked Data Structures
|
#include <WriteSet.hpp>
Public Member Functions | |
WordLoggingWriteSetEntry (void **paddr, void *pval) | |
void | update (const WordLoggingWriteSetEntry &rhs) |
bool | filter (void **lower, void **upper) |
void | writeback () const |
void | rollback (void **lower, void **upper) |
Public Attributes | |
void ** | addr |
void * | val |
The WriteSet implementation is heavily influenced by the configuration parameters, STM_WS_(WORD/BYTE)LOG, STM_PROTECT_STACK, and STM_ABORT_ON_THROW. This means that much of this file is ifdeffed accordingly. The log entry type when we're word-logging is pretty trivial, and just logs address/value pairs.
|
inline |
|
inline |
Check to see if the entry is completely contained within the given address range. We have some preconditions here w.r.t. alignment and size of the range. It has to be at least word aligned and word sized. This is currently only used with stack addresses, so we don't include asserts because we don't want to pay for them in the common case writeback loop.
|
inline |
Called during rollback if there is an exception object that we need to perform writes to. The address range is the range of addresses that we're looking for. If this log entry is contained in the range, we perform the writeback.
NB: We're assuming a pretty well defined address range, in terms of size and alignment here, because the word-based writeset can only handle word-sized data.
|
inline |
Called when we are WAW an address, and we want to coalesce the write. Trivial for the word-based writeset, but complicated for the byte-based version.
|
inline |
Called during writeback to actually perform the logged write. This is trivial for the word-based set, but the byte-based set is more complicated.
void** stm::WordLoggingWriteSetEntry::addr |
void* stm::WordLoggingWriteSetEntry::val |