From 60164570111873175111cf8a5b973375e492eee9 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 27 Sep 2011 13:50:29 -0400 Subject: process-shared barrier support, based on discussion with bdonlan this implementation is rather heavy-weight, but it's the first solution i've found that's actually correct. all waiters actually wait twice at the barrier so that they can synchronize exit, and they hold a "vm lock" that prevents changes to virtual memory mappings (and blocks pthread_barrier_destroy) until all waiters are finished inspecting the barrier. thus, it is safe for any thread to destroy and/or unmap the barrier's memory as soon as pthread_barrier_wait returns, without further synchronization. --- src/thread/pthread_barrierattr_setpshared.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/thread/pthread_barrierattr_setpshared.c') diff --git a/src/thread/pthread_barrierattr_setpshared.c b/src/thread/pthread_barrierattr_setpshared.c index d6c7f9a3..1edc95dc 100644 --- a/src/thread/pthread_barrierattr_setpshared.c +++ b/src/thread/pthread_barrierattr_setpshared.c @@ -2,6 +2,6 @@ int pthread_barrierattr_setpshared(pthread_barrierattr_t *a, int pshared) { - *a = !!pshared; + *a = pshared ? INT_MIN : 0; return 0; } -- cgit v1.2.1