An atomic snapshot object is an object that can be concurrently accessed by n asynchronous processes prone to crash. It is made of m components (base atomic registers) and is defined by two operations: an update operation that allows a process to atomically assign a new value to a component and a snapshot operation that atomically reads and returns the values of all the components. To cope with the net effect of concurrency, asynchrony and failures, the algorithm implementing the update operation has to help concurrent snapshot operations in order they can always terminate. This paper presents a new and particularly simple construction of a snapshot object. This construction relies on a new principle, that we call "write first, help later" strategy. This strategy directs an update operation first to write its value and only then computes an helping snapshot value that can be used by a snapshot operation in order to terminate. Interestingly, not only the algorithms implementing the snapshot and update operations are simple and have easy proofs, but they are also efficient in terms of the number of accesses to the underlying atomic registers shared by the processes. An operation costs O(m) in the best case and O(n × m) in the worst case.Key-words: Asynchronous shared memory system, Atomicity, Atomic snapshot, Concurrency, Linearizability, Atomic registers, Process crash, Read/Write atomic register, Wait-freedom.
Un algorithme de snapshot simple pour les systèmes multi-coeursRésumé : Ce rapport présente un algorithme de snapshot simple. Contrairement aux algorithmes proposés précédemment, il utilise le principe suivant: pour effectuer une miseà jour d'unélément du snapshot, les processusécrivent d'abord en mémoire partagée la valeur qu'ils veulent affecterà cetélément puis ils calculent une valeur d'aide.