Concurrency Coordination Reports
Guard Flag Coordination Report
Let a boolean guard claim a single owner and report how many of the contending claims were granted.
guard flag
A guard flag grants the first claim and blocks the rest, so the granted count and owner stay deterministic scalars.
Guard Flag Coordination Report
guard_flag_coordination.js
Replay: real traced execution (multi-file project)
const claims = 2;
let owner = "none";
let granted = 0;
let blocked = 0;
function coordinate(count) {
let claimed = false;
for (let i = 1; i <= count; i++) {
if (!claimed) {
claimed = true;
owner = "task" + i;
granted += 1;
} else {
blocked += 1;
}
}
let outcome = "open";
if (granted >= 1 && blocked >= 1) {
outcome = "contended";
} else if (granted >= 1) {
outcome = "held";
}
console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}
coordinate(claims);
const claims = 0;
let owner = "none";
let granted = 0;
let blocked = 0;
function coordinate(count) {
let claimed = false;
for (let i = 1; i <= count; i++) {
if (!claimed) {
claimed = true;
owner = "task" + i;
granted += 1;
} else {
blocked += 1;
}
}
let outcome = "open";
if (granted >= 1 && blocked >= 1) {
outcome = "contended";
} else if (granted >= 1) {
outcome = "held";
}
console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}
coordinate(claims);
const claims = 1;
let owner = "none";
let granted = 0;
let blocked = 0;
function coordinate(count) {
let claimed = false;
for (let i = 1; i <= count; i++) {
if (!claimed) {
claimed = true;
owner = "task" + i;
granted += 1;
} else {
blocked += 1;
}
}
let outcome = "open";
if (granted >= 1 && blocked >= 1) {
outcome = "contended";
} else if (granted >= 1) {
outcome = "held";
}
console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);
}
coordinate(claims);
claims ← 2, owner ← none, granted ← 0, blocked ← 0
1const claims→ 2 = 2; //@claims=0, 12let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7 let claimed = false;8 for (let i = 1; i <= count; i++) {9 if (!claimed) {10 claimed = true;11 owner = "task" + i;12 granted += 1;13 } else {14 blocked += 1;15 }16 }17 let outcome = "open";18 if (granted >= 1 && blocked >= 1) {19 outcome = "contended";20 } else if (granted >= 1) {21 outcome = "held";22 }23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims2);claimed ← false
3let granted = 0;4let blocked = 0;56function coordinate(count2) {7 let claimed→ false = false;8 for (let i = 1; i <= count; i++) {for (let i = 1; i <= count; i++)
pass 1 of 26function coordinate(count) {7 let claimed = false;8 for (let i1 = 1; i <= count2; i++) {9 if (!claimed) {if (!claimed)
7let claimed = false;8for (let i = 1; i <= count; i++) {9 if (!claimedfalse) {10 claimed = true;11 owner = "task" + i1;12 granted += 1;13 } else {for (let i = 1; i <= count; i++)
pass 2 of 26function coordinate(count) {7 let claimed = false;8 for (let i2 = 1; i <= count2; i++) {9 if (!claimed) {outcome ← open
15 }16}17let outcome→ open = "open";18if (granted >= 1 && blocked >= 1) {if (granted >= 1 && blocked >= 1)
16}17let outcome = "open";18if (granted1 >= 1 && blocked1 >= 1) {19 outcome = "contended";20} else if (granted >= 1) {console.log(`claims=${count} granted=${granted} blocked=${blocked} own…
21 outcome = "held";22 }23 console.log(`claims=${count2} granted=${granted1} blocked=${blocked1} owner=${ownertask1} status=${outcomecontended}`);24}outputclaims=2 granted=1 blocked=1 owner=task1 status=contendedcoordinate(claims);
23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims2);
claims ← 0, owner ← none, granted ← 0, blocked ← 0
1const claims→ 0 = 0;2let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7 let claimed = false;8 for (let i = 1; i <= count; i++) {9 if (!claimed) {10 claimed = true;11 owner = "task" + i;12 granted += 1;13 } else {14 blocked += 1;15 }16 }17 let outcome = "open";18 if (granted >= 1 && blocked >= 1) {19 outcome = "contended";20 } else if (granted >= 1) {21 outcome = "held";22 }23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims0);claimed ← false, outcome ← open
3let granted = 0;4let blocked = 0;56function coordinate(count0) {7 let claimed→ false = false;8 for (let i = 1; i <= count; i++) {9 if (!claimed) {10 claimed = true;11 owner = "task" + i;12 granted += 1;13 } else {14 blocked += 1;15 }16 }17 let outcome→ open = "open";18 if (granted >= 1 && blocked >= 1) {19 outcome = "contended";20 } else if (granted >= 1) {21 outcome = "held";22 }23 console.log(`claims=${count0} granted=${granted0} blocked=${blocked0} owner=${ownernone} status=${outcomeopen}`);24}outputclaims=0 granted=0 blocked=0 owner=none status=opencoordinate(claims);
23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims0);
claims ← 1, owner ← none, granted ← 0, blocked ← 0
1const claims→ 1 = 1;2let owner→ none = "none";3let granted→ 0 = 0;4let blocked→ 0 = 0;56function coordinate(count) {7 let claimed = false;8 for (let i = 1; i <= count; i++) {9 if (!claimed) {10 claimed = true;11 owner = "task" + i;12 granted += 1;13 } else {14 blocked += 1;15 }16 }17 let outcome = "open";18 if (granted >= 1 && blocked >= 1) {19 outcome = "contended";20 } else if (granted >= 1) {21 outcome = "held";22 }23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims1);claimed ← false
3let granted = 0;4let blocked = 0;56function coordinate(count1) {7 let claimed→ false = false;8 for (let i = 1; i <= count; i++) {for (let i = 1; i <= count; i++)
6function coordinate(count) {7 let claimed = false;8 for (let i1 = 1; i <= count1; i++) {9 if (!claimed) {if (!claimed)
7let claimed = false;8for (let i = 1; i <= count; i++) {9 if (!claimedfalse) {10 claimed = true;11 owner = "task" + i1;12 granted += 1;13 } else {outcome ← open
15 }16}17let outcome→ open = "open";18if (granted >= 1 && blocked >= 1) {if (granted >= 1)
19 outcome = "contended";20} else if (granted1 >= 1) {21 outcome = "held";22}console.log(`claims=${count} granted=${granted} blocked=${blocked} own…
21 outcome = "held";22 }23 console.log(`claims=${count1} granted=${granted1} blocked=${blocked0} owner=${ownertask1} status=${outcomeheld}`);24}outputclaims=1 granted=1 blocked=0 owner=task1 status=heldcoordinate(claims);
23 console.log(`claims=${count} granted=${granted} blocked=${blocked} owner=${owner} status=${outcome}`);24}2526coordinate(claims1);