based on introducing concurrent objects for encapsulating non-blocking data structures on a high abstraction level. In addition, we have presented [synchronized]{} and read-modify-write types which support the expression of memory ordering operations at a sufficient level of detail. Concurrent objects provide SC for programs without data races. This SC-for-DRF memory model is well-aligned with Ada’s semantics for blocking synchronization via protected objects, which requires legal programs to be without synchronization errors ([@Ada2012LRM 9.10§11]).

Although Ada 2012 provides the highly abstract protected object monitor-construct for blocking synchronization, there was previously no programming primitive available to match this abstraction level for non-blocking synchronization. The proposed memory model in conjunction with our concurrent object construct for non-blocking synchronization may bar users from having to invent ad-hoc synchronization solutions, which have been found error-prone with blocking synchronization already [@AdHocSync].

Until now, all previous approaches are based on APIs. We have listed a number of advantages that support our approach of making non-blocking data structures first class language citizens. In contrast, our approach for Ada 202x encapsulates non-blocking synchronization inside [concurrent]{} objects. This safe approach makes the code easy to understand. Note that [concurrent]{} objects are not orthogonal to objects in the sense of OOP 