Recent years have seen the development of several different systems for software transactional memory (STM). Most either employ locks in the underlying implementation or depend on threadsafe general-purpose garbage collection to collect stale data and metadata. We consider the design of low-overhead, obstruction-free software transactional memory for non-garbage-collected languages. Our design eliminates dynamic allocation of transactional metadata and co-locates data that are separate in other systems, thereby reducing the expected number of cache misses on the commoncase code path, while preserving nonblocking progress and requiring no atomic instructions other than single-word load, store, and compare-and-swap (or load-linked/store-conditional). We also employ a simple, epoch-based storage management system and introduce a novel conservative mechanism to make reader transactions visible to writers without inducing additional metadata copying or dynamic allocation. Experimental results show throughput significantly higher than that of existing nonblocking STM systems, and highlight significant application-specific differences among conflict detection and validation strategies. General Terms transactional memory, nonblocking synchronization, obstruction freedom, storage management, visible readers 1
To submit an update or takedown request for this paper, please submit an Update/Correction/Removal Request.