Concurrency Coordination Reports
Wait Group Barrier Coordination Report
Record how many awaited tasks arrived at a wait-group barrier and report status.
Wait Group Barrier Coordination Report
waitgroup_barrier_coordination_report.go
package main
import (
"fmt"
"sync"
)
func main() {
var arrivals =
expected := 3
var wg sync.WaitGroup
wg.Add(expected)
done := 0
for i := 0; i < arrivals; i++ {
wg.Done()
done++
}
pending := expected - done
var status string
if done == 0 {
status = "waiting"
} else if pending > 0 {
status = "partial"
} else {
wg.Wait()
status = "released"
}
fmt.Printf("expected=%d done=%d pending=%d %s\n", expected, done, pending, status)
}
package main
import (
"fmt"
"sync"
)
func main() {
var arrivals =
expected := 3
var wg sync.WaitGroup
wg.Add(expected)
done := 0
for i := 0; i < arrivals; i++ {
wg.Done()
done++
}
pending := expected - done
var status string
if done == 0 {
status = "waiting"
} else if pending > 0 {
status = "partial"
} else {
wg.Wait()
status = "released"
}
fmt.Printf("expected=%d done=%d pending=%d %s\n", expected, done, pending, status)
}
package main
import (
"fmt"
"sync"
)
func main() {
var arrivals =
expected := 3
var wg sync.WaitGroup
wg.Add(expected)
done := 0
for i := 0; i < arrivals; i++ {
wg.Done()
done++
}
pending := expected - done
var status string
if done == 0 {
status = "waiting"
} else if pending > 0 {
status = "partial"
} else {
wg.Wait()
status = "released"
}
fmt.Printf("expected=%d done=%d pending=%d %s\n", expected, done, pending, status)
}
completion barrier
A `sync.WaitGroup` tracks how many tasks a barrier still waits for. `Add` sets the expected count and each `Done` lowers it. Calling `Done` a selected number of times in one goroutine keeps the report deterministic: the barrier is released only when every expected task has arrived, so the status moves from waiting through partial to released as the pending count reaches zero.