Messages in this thread | | | Date | Mon, 10 Mar 2008 20:48:53 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH 1/5] lib: introduce call_once() |
| |
On Mon, 10 Mar 2008 23:57:05 +0900 Akinobu Mita <akinobu.mita@gmail.com> wrote:
> call_once() is an utility function which has similar functionality of > pthread_once(). > > +/* > + * call_once - call the initialization function only once > + * > + * @once_control: guarantee that the init_routine will be called only once > + * @init_routine: initialization function > + * > + * The first call to call_once(), with a given once_control, shall call the > + * init_routine with no arguments and return the value init_routine returned. > + * If the init_routine returns zero which indicates the initialization > + * succeeded, subsequent calls of call_once() with the same once_control shall > + * not call the init_routine and return zero. > + */ > + > +static inline int call_once(struct once_control *once_control, > + int (*init_rouine)(void)) > +{ > + return likely(once_control->done) ? 0 > + : call_once_slow(once_control, init_rouine); > +}
I don't believe that this shold be described in terms of an "init_routine". This mechanism can be used for things other than initialisation routines.
It is spelled "routine", not "rouine".
Would it not be simpler and more general to do:
#define ONCE() \ ({ \ static long flag; \ \ return !test_and_set_bit(0, flag); \ })
and then callers can do
if (ONCE()) do_something();
?
| |