English

Write-and-f-array: implementation and an application

Distributed, Parallel, and Cluster Computing 2014-07-24 v1

Abstract

We introduce a new shared memory object: the write-and-f-array, provide its wait-free implementation and use it to construct an improved wait-free implementation of the fetch-and-add object. The write-and-f-array generalizes single-writer write-and-snapshot object in a similar way that the f-array generalizes the multi-writer snapshot object. More specifically, a write-and-f-array is parameterized by an associative operator ff and is conceptually an array with two atomic operations: - write-and-f modifies a single array's element and returns the result of applying ff to all the elements, - read returns the result of applying ff to all the array's elements. We provide a wait-free implementation of an NN-element write-and-f-array with O(NlogN)O(N \log N) memory complexity, O(log3N)O(\log^3 N) step complexity of the write-and-f operation and O(1)O(1) step complexity of the read operation. The implementation uses CAS objects and requires their size to be Ω(logM)\Omega(\log M), where MM is the total number of write-and-f operations executed. We also show, how it can be modified to achieve O(log2N)O(\log^2 N) step complexity of write-and-f, while increasing the memory complexity to O(Nlog2N)O(N \log^2 N). The write-and-f-array can be applied to create a fetch-and-add object for PP processes with O(PlogP)O(P \log P) memory complexity and O(log3P)O(\log^3 P) step complexity of the fetch-and-add operation. This is the first implementation of fetch-and-add with polylogarithmic step complexity and subquadratic memory complexity that can be implemented without CAS or LL/SC objects of unrealistic size.

Cite

@article{arxiv.1407.6153,
  title  = {Write-and-f-array: implementation and an application},
  author = {Robert Obryk},
  journal= {arXiv preprint arXiv:1407.6153},
  year   = {2014}
}
R2 v1 2026-06-22T05:10:45.574Z