From: Rob Pike Date: Fri, 6 Mar 2009 11:36:50 +0000 (-0800) Subject: document once X-Git-Tag: weekly.2009-11-06~2081 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5b4fa1ad22f8a09d8606275ab9e35dee3ab56d0d;p=gostls13.git document once R=rsc DELTA=14 (7 added, 5 deleted, 2 changed) OCL=25818 CL=25834 --- diff --git a/src/lib/once.go b/src/lib/once.go index 2a09a179bc..6047df2364 100644 --- a/src/lib/once.go +++ b/src/lib/once.go @@ -2,13 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// For one-time initialization that is not done during init. -// Wrap the initialization in a niladic function f() and call -// 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. - +// This package provides a single function, Do, to run a function +// exactly once, usually used as part of initialization. package once import "sync" @@ -21,6 +16,13 @@ type job struct { var jobs = make(map[func()]*job) 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()) { joblock.Lock(); j, present := jobs[f];