Operational Remediation Reports
Semaphore Guard Remediation Report
Turn the number of waiters behind a held guard into an enter, backoff, or page remediation action.
guard contention
The waiter count behind a held guard is kept as a scalar, so the remediation action stays deterministic and never depends on semaphore identity or scheduler timing.
Semaphore Guard Remediation Report
SemaphoreGuardRemediationReport.cs
Replay: real traced execution (multi-file project)
using System;
class Program
{
static void Main()
{
int waiters = 0;
int guardLimit = 2;
int acquired = 1;
string action;
if (waiters == 0)
{
action = "enter";
}
else if (waiters <= guardLimit)
{
action = "backoff";
}
else
{
action = "page";
}
Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " " + action);
}
}
using System;
class Program
{
static void Main()
{
int waiters = 1;
int guardLimit = 2;
int acquired = 1;
string action;
if (waiters == 0)
{
action = "enter";
}
else if (waiters <= guardLimit)
{
action = "backoff";
}
else
{
action = "page";
}
Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " " + action);
}
}
using System;
class Program
{
static void Main()
{
int waiters = 3;
int guardLimit = 2;
int acquired = 1;
string action;
if (waiters == 0)
{
action = "enter";
}
else if (waiters <= guardLimit)
{
action = "backoff";
}
else
{
action = "page";
}
Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " " + action);
}
}
waiters ← 0, guardLimit ← 2, acquired ← 1
4{5 static void Main()6 {7 int waiters→ 0 = 0; //@waiters=1, 38 int guardLimit→ 2 = 2;9 int acquired→ 1 = 1;1011 string action;12 if (waiters == 0)action ← enter
11string action;12if (waiters0 == 0)13{14 action→ enter = "enter";15}Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " "…
25 Console.WriteLine("waiters=" + waiters0 + " acquired=" + acquired1 + " " + actionenter);26}outputwaiters=0 acquired=1 enter
waiters ← 1, guardLimit ← 2, acquired ← 1
4{5 static void Main()6 {7 int waiters→ 1 = 1;8 int guardLimit→ 2 = 2;9 int acquired→ 1 = 1;1011 string action;12 if (waiters == 0)action ← backoff
15}16else if (waiters1 <= guardLimit2)17{18 action→ backoff = "backoff";19}Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " "…
25 Console.WriteLine("waiters=" + waiters1 + " acquired=" + acquired1 + " " + actionbackoff);26}outputwaiters=1 acquired=1 backoff
waiters ← 3, guardLimit ← 2, acquired ← 1
4{5 static void Main()6 {7 int waiters→ 3 = 3;8 int guardLimit→ 2 = 2;9 int acquired→ 1 = 1;1011 string action;12 if (waiters == 0)action ← page
19}20else21{22 action→ page = "page";23}Console.WriteLine("waiters=" + waiters + " acquired=" + acquired + " "…
25 Console.WriteLine("waiters=" + waiters3 + " acquired=" + acquired1 + " " + actionpage);26}outputwaiters=3 acquired=1 page