28 lines
559 B
Go
28 lines
559 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
)
|
|
|
|
// START OMIT
|
|
|
|
func main() {
|
|
var v int
|
|
m := sync.Mutex{}
|
|
m.Lock() // 1. main process is owner of lock.
|
|
c := sync.NewCond(&m)
|
|
go func() {
|
|
m.Lock() // 4. blocks until Wait(); goroutine then owns lock.
|
|
v = 1
|
|
c.Broadcast() // 5. let waiters know we're done.
|
|
m.Unlock() // 6. goroutine has released lock.
|
|
}()
|
|
v = 0 // 2. do some initialization.
|
|
c.Wait() // 3. Temporarily release the lock and block until Broadcast() is called.
|
|
fmt.Println(v) // 7. prints "1".
|
|
m.Unlock()
|
|
}
|
|
|
|
// END OMIT
|