The test-and-set object is a fundamental synchronization primitive for shared memory systems. A test-and-set object stores a bit, initialized to 0, and supports one operation, test&set(), which sets the bit's value to 1 and returns its previous value. This paper studies the number of atomic registers required to implement a test-and-set object in the standard asynchronous shared memory model with n processes. The best lower bound is log(n)-1 for obstruction-free (Giakkoupis and Woelfel, 2012) and deadlock-free (Styer and Peterson, 1989) implementations. Recently a deterministic obstruction-free implementation using O(sqrt(n)) registers was presented (Giakkoupis, Helmi, Higham, and Woelfel, 2013). This paper closes the gap between these known upper and lower bounds by presenting a deterministic obstruction-free implementation of a test-and-set object from Theta(log n) registers of size Theta(log n) bits. We also provide a technique to transform any deterministic obstruction-free algorithm, in which, from any configuration, any process can finish if it runs for b steps without interference, into a randomized wait-free algorithm for the oblivious adversary, in which the expected step complexity is polynomial in n and b. This transformation allows us to combine our obstruction-free algorithm with the randomized test-and-set algorithm by Giakkoupis and Woelfel (2012), to obtain a randomized wait-free test-and-set algorithm from Theta(log n) registers, with expected step-complexity Theta(log* n) against the oblivious adversary.
翻译:测试和设定对象是共享记忆系统的基本同步原始对象。 一个测试和设定对象存储略小一点, 初始化为 0, 支持一个操作, 测试和设置 () 将比特值设定为 1 并返回其先前值 。 本文研究在标准的非同步共享记忆模型中执行测试和设定对象所需的原子登记册数量 。 最佳的下限是无阻碍( 基亚克库皮斯 和 Wololfel, 2012) 和无僵局的( 斯蒂尔和彼得森, 1989) 执行 。 最近, 演示了一个使用 O( qrt (n) 登记册将比特亚特 初始和彼得逊 的测试和设定对象 。 最近, 测试和赛尔弗特 (2013) 展示了在标准非同步共享存储器中执行测试和设定对象的测试对象 。 本文缩小了这些已知上限和下限之间的差距, 测试和设定了无障碍的n- 测试和设定的n- serfretical (log n) 。 我们还提供了一种技术, 将任何确定性障碍- 阻碍- detrademinal- revilate- trevational detradestrevational