mirror of
https://github.com/fluencelabs/musl
synced 2025-07-01 07:32:04 +00:00
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.
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
|
||||
int pthread_barrier_init(pthread_barrier_t *b, const pthread_barrierattr_t *a, unsigned count)
|
||||
{
|
||||
if (!count) return EINVAL;
|
||||
*b = (pthread_barrier_t){ ._b_limit = count-1 };
|
||||
if (count-1 > INT_MAX-1) return EINVAL;
|
||||
*b = (pthread_barrier_t){ ._b_limit = count-1 | (a?*a:0) };
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user