This thesis introduces the domain of multiprocessor programming and two of the most common synchronization schemes: correctness achieved by mutual exclusion (locking) and synchronization without explicit locking (lock-free). It focuses on the fundamental concepts and most common properties of lock-freedom as well as giving examples to its use-cases. Also it places lock-free code in contrast to lock-based solutions and compares the two. In later chapters the thesis will highlight several approaches already present in production and in the academic world to data structures providing lock-free properties and more generic frameworks to safe memory reclamation schemes when synchronization is achieved without locks. All examples and code will rely on the features and idioms of modern C++ but the concepts focused on are technology agnostic.
Furthermore in the late chapters the thesis will present a lock-free solution to the atomic_shared_ptr class template in addition to testing and benchmarking concurrent code. To prove its relevance, the specification of the atomic_shared_ptr class template is proposed to the C++17 Standard.