Commit 5b4fa1ad authored by Rob Pike's avatar Rob Pike

document once

R=rsc
DELTA=14  (7 added, 5 deleted, 2 changed)
OCL=25818
CL=25834
parent 85647c94
...@@ -2,13 +2,8 @@ ...@@ -2,13 +2,8 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// For one-time initialization that is not done during init. // This package provides a single function, Do, to run a function
// Wrap the initialization in a niladic function f() and call // exactly once, usually used as part of initialization.
// once.Do(f)
// If multiple processes call once.Do(f) simultaneously
// with the same f argument, only one will call f, and the
// others will block until f finishes running.
package once package once
import "sync" import "sync"
...@@ -21,6 +16,13 @@ type job struct { ...@@ -21,6 +16,13 @@ type job struct {
var jobs = make(map[func()]*job) var jobs = make(map[func()]*job)
var joblock sync.Mutex; var joblock sync.Mutex;
// Do is the the only exported piece of the package.
// For one-time initialization that is not done during init,
// wrap the initialization in a niladic function f() and call
// Do(f)
// If multiple processes call Do(f) simultaneously
// with the same f argument, only one will call f, and the
// others will block until f finishes running.
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