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.