▶ Fig 2 — Thread Helping Protocol (read_internal)
Thread A MCAS initiator Thread B reader / helper Cell addr Atomic.t ① CAS(addr, Value v, Word wd) Word wd ② Atomic.get addr sees Word wd ③ B calls mcas_desc(wd.parent) ↳ helps A complete its MCAS (not_self = true, status = Active) ④ CAS(status, Active, Successful) ⑤ retry → logical_value(wd) returns new_value Key invariant: any thread reading a Word descriptor must help the owner complete before returning a value — guarantees wait-freedom of reads