construct as a first-class citizen of a high-level programming language. We illustrate the use of concurrent objects by several examples.
author:
- Johann Blieberger and Bernd Burgstaller
title: 'Safe Non-blocking Synchronization in Ada 202x'
---

[Introduction\[sec:intro\]]{}

Mutual exclusion locks are the most common technique to synchronize multiple tasks to access shared data. Ada’s protected objects (POs) implement the monitor-lock concept [@Hoare:monitors]. Method-level locking requires a task to acquire an exclusive lock to execute a PO’s entry or procedure. (Protected functions allow concurrent read-access in the style of a readers–writers lock [@Herlihy:2012].) Entries and procedures of a PO thus effectively execute one after another, which makes it straight-forward for programmers to reason about updates to the shared data encapsulated by a PO. Informally, sequential consistency ensures that method calls act as if they occurred in a sequential, total order that is consistent with the program order of each participating task. I.e., for any concurrent execution, the method calls to POs can be ordered sequentially such that they (1) are consistent with program order, and (2) meet each PO’s specification (pre-condition, side-effect, post-condition) [@Herlihy:2012].

Although the sequential consistency semantics of mutual exclusion locks facilitate reasoning about programs, they nevertheless introduce potential concurrency 