Integer assignments aren't atomic in Go, or are they? Then strictly you'd need a lock here to protect against readers (`Succeed()`, `Fail()`, `MayFail()`) in the goroutines that we are waiting for.