{'fraction_non_alphanumeric': 0.01707317073170732, 'fraction_numerical': 0.0040650406504065045, 'mean_word_length': 5.547872340425532, '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}}
Atomic Shelters: Coping with Multi-core Fallout

In this paper we introduce a new method for pessimistically ensuring the atomicity of atomic sections. Similar to previous systems using locks, our system allows programmers to annotate the types of objects with the shelters—an alternative to locks inspired by the Jade programming language— that protect them, and indicate the sections of code to be executed atomically with atomic sections. A static analysis can then determine from which shelters protection is needed for the atomic sections to run atomically. Unlike previous systems, our shelter-based atomic sections are implemented such that they can provide atomicity and deadlockfreedom without the need for whole-program analyses or transactional memory, while imposing only a small annotation burden on the programmer and making only a straightforward change to the underlying type-system. We have implemented shelters-based atomic sections for C, and applied our implementation to 11 benchmarks totaling 100k lines of code including the STAMP benchmark suite, and three multithreaded programs. Our system’s performance is competitive with both explicit locking and a mature software transactional memory implementation.