summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormpi <>2019-02-13 13:22:14 +0000
committermpi <>2019-02-13 13:22:14 +0000
commit976e689fa21b88566fb9707a45c85dc8e85b2886 (patch)
treef36031e2963f066019269aaf12a618618e4b699d
parent2652ec9980da8f6756781c58d96e55ca24dd7dcb (diff)
downloadopenbsd-976e689fa21b88566fb9707a45c85dc8e85b2886.tar.gz
openbsd-976e689fa21b88566fb9707a45c85dc8e85b2886.tar.bz2
openbsd-976e689fa21b88566fb9707a45c85dc8e85b2886.zip
New futex(2) based rwlock implementation based on the mutex code.
This implementation reduces contention because threads no longer need to spin calling sched_yield(2) before going to sleep. Tested by many, thanks! ok visa@, pirofti@
-rw-r--r--src/lib/libc/include/thread_private.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/lib/libc/include/thread_private.h b/src/lib/libc/include/thread_private.h
index 774e0cba1f..98dfaa6322 100644
--- a/src/lib/libc/include/thread_private.h
+++ b/src/lib/libc/include/thread_private.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: thread_private.h,v 1.34 2019/01/10 18:45:33 otto Exp $ */ 1/* $OpenBSD: thread_private.h,v 1.35 2019/02/13 13:22:14 mpi Exp $ */
2 2
3/* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */ 3/* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */
4 4
@@ -298,6 +298,10 @@ struct pthread_cond {
298 struct pthread_mutex *mutex; 298 struct pthread_mutex *mutex;
299}; 299};
300 300
301struct pthread_rwlock {
302 volatile unsigned int value;
303};
304
301#else 305#else
302 306
303struct pthread_mutex { 307struct pthread_mutex {
@@ -315,6 +319,13 @@ struct pthread_cond {
315 struct pthread_mutex *mutex; 319 struct pthread_mutex *mutex;
316 clockid_t clock; 320 clockid_t clock;
317}; 321};
322
323struct pthread_rwlock {
324 _atomic_lock_t lock;
325 pthread_t owner;
326 struct pthread_queue writers;
327 int readers;
328};
318#endif /* FUTEX */ 329#endif /* FUTEX */
319 330
320struct pthread_mutex_attr { 331struct pthread_mutex_attr {