2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,9 +1,31 @@
|
|||
package singlep
|
||||
package main
|
||||
|
||||
// package level data declarations serve as singleton instance variables
|
||||
var X, Y int
|
||||
import (
|
||||
"log"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// package level functions serve as methods for a package-as-a-singleton
|
||||
func F() int {
|
||||
return Y - X
|
||||
var (
|
||||
instance string
|
||||
once sync.Once // initialize instance with once.Do
|
||||
)
|
||||
|
||||
func claim(color string, w *sync.WaitGroup) {
|
||||
time.Sleep(time.Duration(rand.Intn(1e8))) // hesitate up to .1 sec
|
||||
log.Println("trying to claim", color)
|
||||
once.Do(func() { instance = color })
|
||||
log.Printf("tried %s. instance: %s", color, instance)
|
||||
w.Done()
|
||||
}
|
||||
|
||||
func main() {
|
||||
rand.Seed(time.Now().Unix())
|
||||
var w sync.WaitGroup
|
||||
w.Add(2)
|
||||
go claim("red", &w) // these two attempts run concurrently
|
||||
go claim("blue", &w)
|
||||
w.Wait()
|
||||
log.Println("after trying both, instance =", instance)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue