Concurrency Coordination Reports
Once Value Coordination Report
Commit a write-once value on the first attempt and report how many later writes were rejected.
write-once value
A write-once value accepts the first commit and ignores the rest, keeping the stored value and commit count deterministic.
Once Value Coordination Report
once_value_coordination.js
Replay: real traced execution (multi-file project)
const writes = 3;
let value = -1;
let commits = 0;
let rejected = 0;
function coordinate(count) {
for (let i = 1; i <= count; i++) {
if (value === -1) {
value = i * 10;
commits += 1;
} else {
rejected += 1;
}
}
let outcome = "unset";
if (commits >= 1 && rejected >= 1) {
outcome = "guarded";
} else if (commits >= 1) {
outcome = "sealed";
}
console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);
}
coordinate(writes);
const writes = 0;
let value = -1;
let commits = 0;
let rejected = 0;
function coordinate(count) {
for (let i = 1; i <= count; i++) {
if (value === -1) {
value = i * 10;
commits += 1;
} else {
rejected += 1;
}
}
let outcome = "unset";
if (commits >= 1 && rejected >= 1) {
outcome = "guarded";
} else if (commits >= 1) {
outcome = "sealed";
}
console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);
}
coordinate(writes);
const writes = 1;
let value = -1;
let commits = 0;
let rejected = 0;
function coordinate(count) {
for (let i = 1; i <= count; i++) {
if (value === -1) {
value = i * 10;
commits += 1;
} else {
rejected += 1;
}
}
let outcome = "unset";
if (commits >= 1 && rejected >= 1) {
outcome = "guarded";
} else if (commits >= 1) {
outcome = "sealed";
}
console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);
}
coordinate(writes);
writes ← 3, value ← -1, commits ← 0, rejected ← 0
1const writes→ 3 = 3; //@writes=0, 12let value→ -1 = -1;3let commits→ 0 = 0;4let rejected→ 0 = 0;56function coordinate(count) {7 for (let i = 1; i <= count; i++) {8 if (value === -1) {9 value = i * 10;10 commits += 1;11 } else {12 rejected += 1;13 }14 }15 let outcome = "unset";16 if (commits >= 1 && rejected >= 1) {17 outcome = "guarded";18 } else if (commits >= 1) {19 outcome = "sealed";20 }21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes3);function coordinate(count)
3let commits = 0;4let rejected = 0;56function coordinate(count3) {7 for (let i = 1; i <= count; i++) {for (let i = 1; i <= count; i++)
pass 1 of 36function coordinate(count) {7 for (let i1 = 1; i <= count3; i++) {8 if (value === -1) {All 3 passes — pass 1 is the card above pass valuei1 -1 1 2 — 2 3 — 3 i ← 1
6function coordinate(count) {7 for (let i = 1; i <= count; i++) {8 if (value-1 === -1) {9 value = i→ 1 * 10;10 commits += 1;11 } else {outcome ← unset
13 }14}15let outcome→ unset = "unset";16if (commits >= 1 && rejected >= 1) {if (commits >= 1 && rejected >= 1)
14}15let outcome = "unset";16if (commits1 >= 1 && rejected2 >= 1) {17 outcome = "guarded";18} else if (commits >= 1) {console.log(`writes=${count} value=${value} commits=${commits} rejecte…
19 outcome = "sealed";20 }21 console.log(`writes=${count3} value=${value10} commits=${commits1} rejected=${rejected2} status=${outcomeguarded}`);22}outputwrites=3 value=10 commits=1 rejected=2 status=guardedcoordinate(writes);
21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes3);
writes ← 0, value ← -1, commits ← 0, rejected ← 0
1const writes→ 0 = 0;2let value→ -1 = -1;3let commits→ 0 = 0;4let rejected→ 0 = 0;56function coordinate(count) {7 for (let i = 1; i <= count; i++) {8 if (value === -1) {9 value = i * 10;10 commits += 1;11 } else {12 rejected += 1;13 }14 }15 let outcome = "unset";16 if (commits >= 1 && rejected >= 1) {17 outcome = "guarded";18 } else if (commits >= 1) {19 outcome = "sealed";20 }21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes0);outcome ← unset
3let commits = 0;4let rejected = 0;56function coordinate(count0) {7 for (let i = 1; i <= count; i++) {8 if (value === -1) {9 value = i * 10;10 commits += 1;11 } else {12 rejected += 1;13 }14 }15 let outcome→ unset = "unset";16 if (commits >= 1 && rejected >= 1) {17 outcome = "guarded";18 } else if (commits >= 1) {19 outcome = "sealed";20 }21 console.log(`writes=${count0} value=${value-1} commits=${commits0} rejected=${rejected0} status=${outcomeunset}`);22}outputwrites=0 value=-1 commits=0 rejected=0 status=unsetcoordinate(writes);
21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes0);
writes ← 1, value ← -1, commits ← 0, rejected ← 0
1const writes→ 1 = 1;2let value→ -1 = -1;3let commits→ 0 = 0;4let rejected→ 0 = 0;56function coordinate(count) {7 for (let i = 1; i <= count; i++) {8 if (value === -1) {9 value = i * 10;10 commits += 1;11 } else {12 rejected += 1;13 }14 }15 let outcome = "unset";16 if (commits >= 1 && rejected >= 1) {17 outcome = "guarded";18 } else if (commits >= 1) {19 outcome = "sealed";20 }21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes1);function coordinate(count)
3let commits = 0;4let rejected = 0;56function coordinate(count1) {7 for (let i = 1; i <= count; i++) {for (let i = 1; i <= count; i++)
6function coordinate(count) {7 for (let i1 = 1; i <= count1; i++) {8 if (value === -1) {i ← 1
6function coordinate(count) {7 for (let i = 1; i <= count; i++) {8 if (value-1 === -1) {9 value = i→ 1 * 10;10 commits += 1;11 } else {outcome ← unset
13 }14}15let outcome→ unset = "unset";16if (commits >= 1 && rejected >= 1) {if (commits >= 1)
17 outcome = "guarded";18} else if (commits1 >= 1) {19 outcome = "sealed";20}console.log(`writes=${count} value=${value} commits=${commits} rejecte…
19 outcome = "sealed";20 }21 console.log(`writes=${count1} value=${value10} commits=${commits1} rejected=${rejected0} status=${outcomesealed}`);22}outputwrites=1 value=10 commits=1 rejected=0 status=sealedcoordinate(writes);
21 console.log(`writes=${count} value=${value} commits=${commits} rejected=${rejected} status=${outcome}`);22}2324coordinate(writes1);