Operational Remediation Reports
RWMutex Read Remediation Report
Admit concurrent readers against a fixed capacity and turn the remaining read slots into an admit, hold, or shed remediation action.
read admission
The reader admission is modeled with a scalar capacity counter, so the remaining slots stay deterministic and free of lock identity while driving the remediation action.
RWMutex Read Remediation Report
rwmutex_read_remediation_report.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func main() {
var readers = 1
capacity := 3
admitted := readers
if admitted > capacity {
admitted = capacity
}
remaining := capacity - admitted
var action string
if remaining >= 2 {
action = "admit"
} else if remaining == 1 {
action = "hold"
} else {
action = "shed"
}
fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers, admitted, remaining, action)
}
package main
import "fmt"
func main() {
var readers = 2
capacity := 3
admitted := readers
if admitted > capacity {
admitted = capacity
}
remaining := capacity - admitted
var action string
if remaining >= 2 {
action = "admit"
} else if remaining == 1 {
action = "hold"
} else {
action = "shed"
}
fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers, admitted, remaining, action)
}
package main
import "fmt"
func main() {
var readers = 4
capacity := 3
admitted := readers
if admitted > capacity {
admitted = capacity
}
remaining := capacity - admitted
var action string
if remaining >= 2 {
action = "admit"
} else if remaining == 1 {
action = "hold"
} else {
action = "shed"
}
fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers, admitted, remaining, action)
}
readers ← 1, capacity ← 3, admitted ← 1, remaining ← 2, action ← ""
5func main() {6 var readers→ 1 = 1 //@readers=2, 47 capacity→ 3 := 38 admitted→ 1 := readers19 if admitted > capacity {10 admitted = capacity11 }12 remaining→ 2 := capacity3 - admitted113 var action→ "" string14 if remaining >= 2 {action ← "admit"
13var action string14if remaining2 >= 2 {15 action→ "admit" = "admit"16} else if remaining == 1 {fmt.Printf("readers=%d admitted=%d remaining=%d %s ", readers, admitte…
20 }21 fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers1, admitted1, remaining2, action"admit")22}outputreaders=1 admitted=1 remaining=2 admit
readers ← 2, capacity ← 3, admitted ← 2, remaining ← 1, action ← ""
5func main() {6 var readers→ 2 = 27 capacity→ 3 := 38 admitted→ 2 := readers29 if admitted > capacity {10 admitted = capacity11 }12 remaining→ 1 := capacity3 - admitted213 var action→ "" string14 if remaining >= 2 {action ← "hold"
15 action = "admit"16} else if remaining1 == 1 {17 action→ "hold" = "hold"18} else {fmt.Printf("readers=%d admitted=%d remaining=%d %s ", readers, admitte…
20 }21 fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers2, admitted2, remaining1, action"hold")22}outputreaders=2 admitted=2 remaining=1 hold
readers ← 4, capacity ← 3, admitted ← 4
5func main() {6 var readers→ 4 = 47 capacity→ 3 := 38 admitted→ 4 := readers49 if admitted > capacity {admitted ← 3
8admitted := readers9if admitted4 > capacity3 {10 admitted→ 3 = capacity311}remaining ← 0, action ← ""
11}12remaining→ 0 := capacity3 - admitted313var action→ "" string14if remaining >= 2 {action ← "shed"
17 action = "hold"18} else {19 action→ "shed" = "shed"20}fmt.Printf("readers=%d admitted=%d remaining=%d %s ", readers, admitte…
20 }21 fmt.Printf("readers=%d admitted=%d remaining=%d %s\n", readers4, admitted3, remaining0, action"shed")22}outputreaders=4 admitted=3 remaining=0 shed