Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Nov 2009 10:30:13 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        threads@FreeBSD.org
Subject:   Using pthread_once() in libc
Message-ID:  <200911191030.14151.jhb@freebsd.org>

next in thread | raw e-mail | index | archive | help
I would like to provide a pthread_once()-like facility in libc that library 
bits can use to initialize data safely rather than trying to home-roll their 
own variants (see the recent commit to stdtime in libc).  Ideally what I 
would like to do is have libc use the "real" pthread_once() when libthr is 
linked in and fall back to a simple stub without libthr linked in.  I know we 
already do something like this for _spinlock() and friends.  My question is 
what is the most correct way to do this?  Should libc grow a new _once() 
symbol ala _spinlock() that is a weak symbol to a stub version and 
pthread_once() in thr_once.c would override that, or should there be a 
_pthread_once() in libc that is a stub in place of the current stub_zero?  I 
noticed a comment in thr_spinlock.c saying the spinlock stuff is kept for 
backwards compat.  Does this mean that for the future we would like to expose 
pthread symbols directly in libc?  Meaning would we rather have libc export a 
pthread_once() and that ideally libc would be using pthread_mutex_lock/unlock 
instead of _spinlock/unlock?

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911191030.14151.jhb>