{'fraction_non_alphanumeric': 0.028985507246376812, 'fraction_numerical': 0.0, 'mean_word_length': 5.026845637583893, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Transacting Pointer-based Accesses in an Object-based Software Transactional Memory System

Software transactional memory (STM) systems for objectoriented languages that allow relocating garbage collection (such as languages for the .NET platform, or Java) must decide how transactional metadata (i.e., fine-grained locks) is associated with objects. An obvious approach is to locate this metadata with the object, and move it when the object is moved. This approach becomes complicated if the platform allows interior pointers to heap objects, as .NET does: how do we find the transactional metadata that governs an access via an interior pointer? We present an approach that solves this problem via a combination of static and dynamic information. The most important goal of this solution is that it be pay-for-play: that programs that do not use transactions are impacted as little as possible.