From ba9c6f0989ae94778ba2b9f597adc827c9dc81e8 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Wed, 10 Mar 2010 16:44:08 -0800 Subject: bionic: pthread: use private futexes by default for mutexes and condvars Private futexes are a recent kernel addition: faster futexes that cannot be shared between processes. This patch uses them by default, unless the PROCESS_SHARED attribute flag is used when creating a mutex and/or conditional variable. Also introduces pthread_condattr_init/destroy/setpshared/getpshared. Change-Id: I3a0e2116f467072b046524cb5babc00e41057a53 --- libc/arch-sh/bionic/atomics_sh.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libc/arch-sh/bionic/atomics_sh.c') diff --git a/libc/arch-sh/bionic/atomics_sh.c b/libc/arch-sh/bionic/atomics_sh.c index 16966f7..5171363 100644 --- a/libc/arch-sh/bionic/atomics_sh.c +++ b/libc/arch-sh/bionic/atomics_sh.c @@ -98,3 +98,21 @@ int __futex_wake(volatile void *ftx, int count) { return futex(ftx, FUTEX_WAKE, count, NULL, NULL, 0); } + +/* Private futexes belong to a single address space and cannot be + * shared among processes. They are however significantly faster to + * operate than standard futexes. + */ +#define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_WAIT_PRIVATE (FUTEX_WAIT|FUTEX_PRIVATE_FLAG) +#define FUTEX_WAKE_PRIVATE (FUTEX_WAKE|FUTEX_PRIVATE_FLAG) + +int __futex_wait_private(volatile void *ftx, int val, const struct timespec *timeout) +{ + return futex(ftx, FUTEX_WAIT_PRIVATE, val, (void *)timeout, NULL, 0); +} + +int __futex_wake_private(volatile void *ftx, int count) +{ + return futex(ftx, FUTEX_WAKE_PRIVATE, count, NULL, NULL, 0); +} -- cgit v1.1