freebsd-dev/include
David Xu 9b0f1823b5 Use umtx to implement process sharable semaphore, to make this work,
now type sema_t is a structure which can be put in a shared memory area,
and multiple processes can operate it concurrently.
User can either use mmap(MAP_SHARED) + sem_init(pshared=1) or use sem_open()
to initialize a shared semaphore.
Named semaphore uses file system and is located in /tmp directory, and its
file name is prefixed with 'SEMD', so now it is chroot or jail friendly.
In simplist cases, both for named and un-named semaphore, userland code
does not have to enter kernel to reduce/increase semaphore's count.
The semaphore is designed to be crash-safe, it means even if an application
is crashed in the middle of operating semaphore, the semaphore state is
still safely recovered by later use, there is no waiter counter maintained
by userland code.
The main semaphore code is in libc and libthr only has some necessary stubs,
this makes it possible that a non-threaded application can use semaphore
without linking to thread library.
Old semaphore implementation is kept libc to maintain binary compatibility.
The kernel ksem API is no longer used in the new implemenation.

Discussed on: threads@
2010-01-05 02:37:59 +00:00
..
arpa Namespace: inet_ntoa_r() is a BSD extension. 2009-03-14 19:00:16 +00:00
gssapi Add an implementation of the RPCSEC_GSS authentication protocol for RPC. This 2008-08-06 14:02:05 +00:00
protocols Expand dump to allow MAX_INT dump levels. 2008-05-24 05:20:46 +00:00
rpc Re-do r192913 in less intrusive way. Only do IP_RECVDSTADDR/IP_SENDSRCADDR 2009-06-18 17:10:43 +00:00
rpcsvc Fix ypwhich -m. This should be MFC'ed back at least as far as RELENG_5. 2005-12-06 02:01:06 +00:00
_ctype.h Back out not human readable optimization in prev. commit which shown 2007-11-01 03:18:02 +00:00
a.out.h Adjust the system endian and a.out headers to be more MI and cross-building 2004-06-22 17:05:39 +00:00
ar.h Attempt to improve application portability by marking `struct ar_hdr' 2006-11-13 04:28:29 +00:00
assert.h Only protect the prototypes with #ifndef _ASSERT_H_, the standards 2007-12-01 19:28:13 +00:00
bitstring.h
complex.h Implement cproj{,f,l}(). 2008-08-07 15:07:48 +00:00
cpio.h
ctype.h Don't prototype _tolower() and _toupper(). They're not supposed to be 2009-03-14 19:04:24 +00:00
db.h Hide dbopen() in the POSIX namespace, and use standard type names 2009-03-14 20:05:27 +00:00
dirent.h Modernize scandir(3) and alphasort(3) interfaces according to the IEEE 2010-01-04 15:40:17 +00:00
dlfcn.h Implement RTLD_NOLOAD flag for dlopen(3). 2009-07-17 19:45:42 +00:00
elf-hints.h
elf.h Remove some OpenSolaris compatibility stuff now that we're doing it a 2007-11-28 22:09:12 +00:00
err.h
fmtmsg.h
fnmatch.h Now I understand what Bruce was getting at - -1 can be parsed as two 2003-12-18 10:41:39 +00:00
fstab.h
fts.h Our fts(3) API, as inherited from 4.4BSD, suffers from integer 2008-01-26 17:09:40 +00:00
ftw.h Replace the current implementations of ftw() and nftw() with the OpenBSD 2004-08-24 13:00:55 +00:00
getopt.h Add getopt_long_only() 2004-02-24 08:09:20 +00:00
glob.h Add size_t declaration 2006-05-22 05:57:39 +00:00
grp.h Namespace: setgrent() is an XSI extension. 2009-03-14 19:05:18 +00:00
gssapi.h Add a new extensible GSS-API layer which can support GSS-API plugins, 2005-12-29 14:40:22 +00:00
hesiod.h
histedit.h Use tabs after #define. 2007-06-11 06:25:19 +00:00
ieeefp.h
ifaddrs.h Add the userland part of the NET_RT_IFMALIST sysctl MIB. A new function, 2003-11-14 18:53:22 +00:00
inttypes.h
iso646.h
kenv.h Fix prototype to match the code and documentation. 2005-11-24 07:20:26 +00:00
langinfo.h Modified locale(1) to be able to show the altmon_X fields and the [cxX]_fmt's. 2009-10-05 07:11:19 +00:00
libgen.h Add basename_r(3) to complement basename(3). basename_r(3) which accepts 2009-10-06 14:05:57 +00:00
limits.h
link.h
locale.h Change the definition of NULL on ia64 (for LP64 compilations) from 2003-12-07 21:10:06 +00:00
Makefile Use umtx to implement process sharable semaphore, to make this work, 2010-01-05 02:37:59 +00:00
malloc_np.h Add __{BEGIN,END}_DECLS macros, so that function prototypes remain 2006-06-30 20:57:41 +00:00
malloc.h
memory.h
monetary.h
mpool.h Minor changes from Berkeley DB 1.86 and further improvements from OpenBSD. 2009-03-28 07:31:02 +00:00
mqueue.h Add function __mq_oshandle() to get file handle of a mqueue. 2007-01-06 11:30:04 +00:00
ndbm.h Namespace: dbm_forder() and dbm_dirfno() are BSD extensions. 2009-03-14 19:02:28 +00:00
netconfig.h
netdb.h Hide numerous BSD extensions in the POSIX namespace. 2009-03-14 20:04:28 +00:00
nl_types.h Analogous to __printflike and __scanflike, add the macro __format_arg which 2006-01-26 20:53:40 +00:00
nlist.h
nss.h It was reported that when using nss_ldap, getgrent(3) would behave 2004-01-09 13:43:49 +00:00
nsswitch.h Implementing 'fallback' nsswitch source. 'fallback' source is used 2007-12-12 10:08:03 +00:00
paths.h Remove the current directory from _PATH_STDPATH. 2009-12-30 15:44:36 +00:00
printf.h Add nested include of <wchar.h> 2006-03-02 10:01:52 +00:00
proc_service.h Introduce a new proc service routine ps_linfo() to get LWP info. 2006-02-07 02:29:55 +00:00
pthread_np.h Add cpu affinity APIs to get and set thread's cpu affinity mask, the 2008-03-03 08:28:13 +00:00
pthread.h Fix the visibility of several prototypes. Also move pthread_kill() and 2009-03-14 20:10:14 +00:00
pwd.h Namespace: endpwent, getpwent, and setpwent are XSI extensions. 2009-03-14 19:13:01 +00:00
ranlib.h
readpassphrase.h Define the size_t type since readpassphrase(3) requires it in its 2008-05-08 23:57:29 +00:00
regex.h Add a new error code, REG_ILLSEQ, to indicate that a regular expression 2004-07-12 06:07:26 +00:00
regexp.h
res_update.h Merge BIND 9.4.1 into main chunk. 2007-06-03 17:20:27 +00:00
resolv.h Merge the resolver part of BIND 9.4.3 into HEAD. 2008-12-14 19:39:53 +00:00
runetype.h Prefix the names of members of _RuneLocale and its sub-structures 2004-06-23 07:01:44 +00:00
search.h
semaphore.h Use umtx to implement process sharable semaphore, to make this work, 2010-01-05 02:37:59 +00:00
setjmp.h Namespace: _setjmp() and _longjmp() are XSI extensions. 2009-03-14 19:01:26 +00:00
signal.h Don't name parameters, for consistency with the rest of the file, and because 2009-12-22 22:15:52 +00:00
spawn.h Remove __restrict keywords from array arguments to make GCC's -std=c99 work. 2008-06-19 07:30:32 +00:00
stab.h
stdbool.h The Intel C/C++ compiler doesn't require a typedef for _Bool when compiling 2005-02-19 13:47:33 +00:00
stddef.h Change the definition of NULL on ia64 (for LP64 compilations) from 2003-12-07 21:10:06 +00:00
stdio.h Merge fmtcheck() prototype change. 2009-06-23 23:53:35 +00:00
stdlib.h Namespace: abort2() is a BSD extension. 2009-03-14 19:13:30 +00:00
string.h Namespace: memccpy() and memchr() are XSI, and memrchr() is a BSD extension. 2009-03-14 19:03:34 +00:00
stringlist.h
strings.h This should read #if __BSD_VISIBLE instead of #ifdef __BSD_VISIBLE. 2010-01-04 18:46:54 +00:00
sysexits.h
tar.h
termios.h Decompose <sys/termios.h>. 2009-11-28 23:50:48 +00:00
tgmath.h Properly parenthesize the __tg_is_complex() macro by moving a closing 2007-02-02 18:30:23 +00:00
time.h Add POSIX pthread API pthread_getcpuclockid() to get a thread's cpu 2008-03-22 09:59:20 +00:00
timeconv.h
timers.h
ttyent.h
ulimit.h
unistd.h There is an optimization in chmod(1), that makes it not to call chmod(2) 2009-07-08 15:23:18 +00:00
utime.h
utmp.h Add a comment to utmp.h about the sizes of UT_HOSTSIZE and UT_LINESIZE. 2008-11-16 14:43:33 +00:00
uuid.h Add missing prototypes for uuid_enc,dec_le,be() functions. 2008-09-15 23:47:19 +00:00
varargs.h Add a new machine independent varargs.h and use it as a central place 2003-09-01 03:28:25 +00:00
vis.h Add a new flag to vis(3): VIS_GLOB which encodes the glob(3) magic 2003-10-30 10:40:49 +00:00
wchar.h Put the restrict qualifiers in the right place in the wcp[n]cpy prototypes. 2009-03-04 15:45:34 +00:00
wctype.h Back out iswascii change from prev. commit, iswascii was right, 2007-10-14 10:23:54 +00:00
wordexp.h Fix typo: WRDE_DOOFS -> WRDE_DOOFFS. 2004-06-30 13:55:08 +00:00