Automatic Interleaving of High-Level Concurrent Operations

Introduction When working with low-level concurrency (atomics), programming languages are generally quite eager for compilers to reorder operations if it leads to better performance. Information about whether it's ok to reorder operations is encoded using Atomic Orderings , Fences , and Operations . It's strange that most programming languages that support semantic-aware reordering of low-level…