“…We consider logical deadlocks, which are distinct from resource deadlocks in that there is an unresolvable cyclic dependence among computational results. Solutions in the logical deadlock domain include techniques that dynamically detect cycles [29,30,37,38,40,54], that raise alarms upon the formation or possible formation of cycles [1,6,14,15,23,55], that statically check for cycles through analysis [42,45,57] or through type systems [7,52], or that preclude cycles by carefully limiting the blocking synchronization semantics available to the programmer, either statically or dynamically [10,12,15,50,55]. The present work includes a dynamic, precise cycle detection algorithm, enabled only by the introduction of a structured ownership semantics on the otherwise unrestricted promise primitive.…”