Concurrency Coordination Reports
Once Value Coordination Report
Record write-once builds against repeated reads and report the cache state.
write-once value
A coordination report can record how a write-once value is shared. A nil cache slot is filled on the first read by a `build` step that bumps a build counter, and every later read finds the slot already set and reuses the one cached value, so the initializer runs at most once. This scalar cache models the write-once guarantee deterministically, since Swift has no top-level lazy primitive that the trace bridge can record cleanly. With no reads the slot stays unset, with one read it is set, and with repeated reads it is locked to the single build. The status line summarizes the state while the build counter confirms one build.
Once Value Coordination Report
once_value_coordination_report.swift
Replay: real traced execution (multi-file project)
let reads = 1
var cached: Int? = nil
var builds = 0
var served = 0
func build() -> Int {
builds += 1
return 7
}
for _ in 0..<reads {
if cached == nil {
cached = build()
}
if let value = cached, value > 0 {
served += 1
}
}
var status = "set"
if builds == 0 {
status = "unset"
}
if served > 1 {
status = "locked"
}
let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"
print(line)
let reads = 0
var cached: Int? = nil
var builds = 0
var served = 0
func build() -> Int {
builds += 1
return 7
}
for _ in 0..<reads {
if cached == nil {
cached = build()
}
if let value = cached, value > 0 {
served += 1
}
}
var status = "set"
if builds == 0 {
status = "unset"
}
if served > 1 {
status = "locked"
}
let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"
print(line)
let reads = 2
var cached: Int? = nil
var builds = 0
var served = 0
func build() -> Int {
builds += 1
return 7
}
for _ in 0..<reads {
if cached == nil {
cached = build()
}
if let value = cached, value > 0 {
served += 1
}
}
var status = "set"
if builds == 0 {
status = "unset"
}
if served > 1 {
status = "locked"
}
let line = "reads=\(reads) served=\(served) builds=\(builds) \(status)"
print(line)
reads ← 1, cached ← nil, builds ← 0, served ← 0
1let reads→ 1 = 1 //@reads=0, 22var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 0for _ in 0..<reads
11for _ in 0..<reads1 {12 if cached == nil {if cached == nil
11for _ in 0..<reads {12 if cachednil == nil {13 cached = build()14 }builds ← 1
6func build() -> Int {7 builds→ 1 += 18 return 79}if let value = cached, value > 0
14}15if let value7 = cachedOptional(7), value > 0 {16 served0 += 117}status ← set, line ← reads=1 served=1 builds=1 set
20var status→ set = "set"21if builds == 0 {22 status = "unset"23}24if served > 1 {25 status = "locked"26}2728let line→ reads=1 served=1 builds=1 set = "reads=\(reads1) served=\(served1) builds=\(builds1) \(statusset)"2930print(linereads=1 served=1 builds=1 set)outputreads=1 served=1 builds=1 set
reads ← 0, cached ← nil, builds ← 0, served ← 0, status ← set
1let reads→ 0 = 02var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 056func build() -> Int {7 builds += 18 return 79}1011for _ in 0..<reads {12 if cached == nil {13 cached = build()14 }15 if let value = cached, value > 0 {16 served += 117 }18}1920var status→ set = "set"21if builds == 0 {if builds == 0
20var status = "set"21if builds0 == 0 {22 status = "unset"23}line ← reads=0 served=0 builds=0 unset
28let line→ reads=0 served=0 builds=0 unset = "reads=\(reads0) served=\(served0) builds=\(builds0) \(statusunset)"2930print(linereads=0 served=0 builds=0 unset)outputreads=0 served=0 builds=0 unset
reads ← 2, cached ← nil, builds ← 0, served ← 0
1let reads→ 2 = 22var cached→ nil: Int? = nil3var builds→ 0 = 04var served→ 0 = 0for _ in 0..<reads
pass 1 of 211for _ in 0..<reads2 {12 if cached == nil {if cached == nil
11for _ in 0..<reads {12 if cachednil == nil {13 cached = build()14 }builds ← 1
6func build() -> Int {7 builds→ 1 += 18 return 79}if let value = cached, value > 0
pass 1 of 214}15if let value7 = cachedOptional(7), value > 0 {16 served0 += 117}for _ in 0..<reads
pass 2 of 211for _ in 0..<reads2 {12 if cached == nil {if let value = cached, value > 0
pass 2 of 214}15if let value7 = cachedOptional(7), value > 0 {16 served1 += 117}status ← set
20var status→ set = "set"21if builds == 0 {if served > 1
23}24if served2 > 1 {25 status = "locked"26}line ← reads=2 served=2 builds=1 locked
28let line→ reads=2 served=2 builds=1 locked = "reads=\(reads2) served=\(served2) builds=\(builds1) \(statuslocked)"2930print(linereads=2 served=2 builds=1 locked)outputreads=2 served=2 builds=1 locked