Shu-yu Guo (Google)
Lars Hansen (Mozilla)
Atomics.waitAsync
for Stage 3
Recap
Atomics.waitAsync(TA,idx,v,t)
If TA[idx] != v, return a promised resolved to “not-equal”.
Else returns a promise that is resolved either when
An agent calls Atomics.notify(TA,idx,c); resolved with “ok”.
Timeout expires; resolved with “timed-out”.
Fairness: Single FIFO Queue
Motivating Anomaly
let p1 = Atomics.waitAsync(i32a,0,v);
let p2 = Atomics.waitAsync(i32a,0,v);
Atomics.wait(i32a,0,v);
Resolving p1 and p2 don’t do anything useful if the agent is blocked!
But We Can’t Solve the General Problem
let p1 = Atomics.waitAsync(i32a,0,v);
let p2 = Atomics.waitAsync(i32a,0,v);
Atomics.wait(i32a,1,v);
Wrong trade off to solve the very narrow same-location case
Single FIFO Queue Implications
Stage 3?