Commit 8afc6008 authored by Russ Cox's avatar Russ Cox

add note about once and closures

R=r
DELTA=13  (13 added, 0 deleted, 0 changed)
OCL=31535
CL=31549
parent 32cd8875
...@@ -23,6 +23,19 @@ var joblock sync.Mutex; ...@@ -23,6 +23,19 @@ var joblock sync.Mutex;
// If multiple processes call Do(f) simultaneously // If multiple processes call Do(f) simultaneously
// with the same f argument, only one will call f, and the // with the same f argument, only one will call f, and the
// others will block until f finishes running. // others will block until f finishes running.
//
// Since a func() expression typically evaluates to a differerent
// function value each time it is evaluated, it is incorrect to
// pass such values to Do. For example,
// func f(x int) {
// Do(func() { fmt.Println(x) })
// }
// behaves the same as
// func f(x int) {
// fmt.Println(x)
// }
// because the func() expression in the first creates a new
// func each time f runs, and each of those funcs is run once.
func Do(f func()) { func Do(f func()) {
joblock.Lock(); joblock.Lock();
j, present := jobs[f]; j, present := jobs[f];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment