Record write-once initialization and report accepted versus skipped runs.

write-once cell `sync.Once.Do` runs its function exactly once across every call, so the first offered write is accepted and stores its value while every later write is skipped. The accepted and skipped counts report whether the cell stayed unset, was set once, or locked out a later write, and the stored value shows what the first accepted write left behind.

Once-Do Coordination Report

writes
once_do_coordination_report.go
Replay: real traced execution (multi-file project)
package main

import (
	"fmt"
	"sync"
)

func main() {
	var writes = 2
	var once sync.Once
	accepted := 0
	skipped := 0
	stored := 0
	for value := 1; value <= writes; value++ {
		ran := false
		once.Do(func() {
			ran = true
			stored = value
		})
		if ran {
			accepted++
		} else {
			skipped++
		}
	}
	var status string
	if accepted == 0 {
		status = "unset"
	} else if skipped > 0 {
		status = "locked"
	} else {
		status = "set"
	}
	fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted, skipped, stored, status)
}
package main

import (
	"fmt"
	"sync"
)

func main() {
	var writes = 0
	var once sync.Once
	accepted := 0
	skipped := 0
	stored := 0
	for value := 1; value <= writes; value++ {
		ran := false
		once.Do(func() {
			ran = true
			stored = value
		})
		if ran {
			accepted++
		} else {
			skipped++
		}
	}
	var status string
	if accepted == 0 {
		status = "unset"
	} else if skipped > 0 {
		status = "locked"
	} else {
		status = "set"
	}
	fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted, skipped, stored, status)
}
package main

import (
	"fmt"
	"sync"
)

func main() {
	var writes = 1
	var once sync.Once
	accepted := 0
	skipped := 0
	stored := 0
	for value := 1; value <= writes; value++ {
		ran := false
		once.Do(func() {
			ran = true
			stored = value
		})
		if ran {
			accepted++
		} else {
			skipped++
		}
	}
	var status string
	if accepted == 0 {
		status = "unset"
	} else if skipped > 0 {
		status = "locked"
	} else {
		status = "set"
	}
	fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted, skipped, stored, status)
}
  1. writes ← 2, once ← sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}}

    8func main() {9  var writes→ 2 = 2 //@writes=0, 110  var once→ sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}} sync.Once11  accepted→ 0 := 012  skipped→ 0 := 013  stored→ 0 := 014  for value := 1; value <= writes; value++ {
  2. ran ← false

    pass 1 of 2
    13stored := 014for value1 := 1; value <= writes2; value++ {15  ran→ false := false16  oncesync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}}.Do(func() {17    ran = true18    stored = value19  })20  if ran {
  3. ran ← true, stored ← 1, once ← sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x1}, m:sync.Mutex{state:0, sema:0x0}}

    15ran := false16once→ sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x1}, m:sync.Mutex{state:0, sema:0x0}}.Do(func() {17  ran→ true = true18  stored→ 1 = value119})20if ran {
  4. accepted ← 1

    19})20if rantrue {21  accepted→ 1++22} else {
  5. ran ← false

    pass 2 of 2
    13stored := 014for value2 := 1; value <= writes2; value++ {15  ran→ false := false16  oncesync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x1}, m:sync.Mutex{state:0, sema:0x0}}.Do(func() {17    ran = true18    stored = value19  })20  if ran {
  6. skipped ← 1

    21  accepted++22} else {23  skipped→ 1++24}
  7. status ← ""

    25}26var status→ "" string27if accepted == 0 {
  8. status ← "locked"

    28  status = "unset"29} else if skipped1 > 0 {30  status→ "locked" = "locked"31} else {
  9. fmt.Printf("accepted=%d skipped=%d stored=%d %s ", accepted, skipped, …

    33  }34  fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted1, skipped1, stored1, status"locked")35}
    outputaccepted=1 skipped=1 stored=1 locked
  1. writes ← 0, once ← sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}}

    8func main() {9  var writes→ 0 = 010  var once→ sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}} sync.Once11  accepted→ 0 := 012  skipped→ 0 := 013  stored→ 0 := 014  for value := 1; value <= writes; value++ {15    ran := false16    once.Do(func() {17      ran = true18      stored = value19    })20    if ran {21      accepted++22    } else {23      skipped++24    }25  }26  var status→ "" string27  if accepted == 0 {
  2. status ← "unset"

    26var status string27if accepted0 == 0 {28  status→ "unset" = "unset"29} else if skipped > 0 {
  3. fmt.Printf("accepted=%d skipped=%d stored=%d %s ", accepted, skipped, …

    33  }34  fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted0, skipped0, stored0, status"unset")35}
    outputaccepted=0 skipped=0 stored=0 unset
  1. writes ← 1, once ← sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}}

    8func main() {9  var writes→ 1 = 110  var once→ sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}} sync.Once11  accepted→ 0 := 012  skipped→ 0 := 013  stored→ 0 := 014  for value := 1; value <= writes; value++ {
  2. ran ← false

    13stored := 014for value1 := 1; value <= writes1; value++ {15  ran→ false := false16  oncesync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x0}, m:sync.Mutex{state:0, sema:0x0}}.Do(func() {17    ran = true18    stored = value19  })20  if ran {
  3. ran ← true, stored ← 1, once ← sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x1}, m:sync.Mutex{state:0, sema:0x0}}

    15ran := false16once→ sync.Once{done:atomic.Uint32{_:atomic.noCopy{}, v:0x1}, m:sync.Mutex{state:0, sema:0x0}}.Do(func() {17  ran→ true = true18  stored→ 1 = value119})20if ran {
  4. accepted ← 1

    19})20if rantrue {21  accepted→ 1++22} else {
  5. status ← ""

    25}26var status→ "" string27if accepted == 0 {
  6. status ← "set"

    30  status = "locked"31} else {32  status→ "set" = "set"33}
  7. fmt.Printf("accepted=%d skipped=%d stored=%d %s ", accepted, skipped, …

    33  }34  fmt.Printf("accepted=%d skipped=%d stored=%d %s\n", accepted1, skipped0, stored1, status"set")35}
    outputaccepted=1 skipped=0 stored=1 set