A Case for an Interleaving Constrained Shared-Memory Multi-Processor
Shared-memory multi-threaded programming is inherently more difficult than single-threaded programming. The main source of complexity is that, the threads of an application can interleave in so many different ways. To ensure correctness, a programmer has to test all possible thread interleaving, which, however, is impractical. Many rare thread interleaving remain untested in production systems, and they are the root cause for a majority of concurrency bugs.