aboutsummaryrefslogtreecommitdiff
path: root/nptl/DESIGN-barrier.txt
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/DESIGN-barrier.txt')
-rw-r--r--nptl/DESIGN-barrier.txt44
1 files changed, 0 insertions, 44 deletions
diff --git a/nptl/DESIGN-barrier.txt b/nptl/DESIGN-barrier.txt
deleted file mode 100644
index 23463c6..0000000
--- a/nptl/DESIGN-barrier.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-Barriers pseudocode
-===================
-
- int pthread_barrier_wait(barrier_t *barrier);
-
-struct barrier_t {
-
- unsigned int lock:
- - internal mutex
-
- unsigned int left;
- - current barrier count, # of threads still needed.
-
- unsigned int init_count;
- - number of threads needed for the barrier to continue.
-
- unsigned int curr_event;
- - generation count
-}
-
-pthread_barrier_wait(barrier_t *barrier)
-{
- unsigned int event;
- result = 0;
-
- lll_lock(barrier->lock);
- if (!--barrier->left) {
- barrier->curr_event++;
- futex_wake(&barrier->curr_event, INT_MAX)
-
- result = BARRIER_SERIAL_THREAD;
- } else {
- event = barrier->curr_event;
- lll_unlock(barrier->lock);
- do {
- futex_wait(&barrier->curr_event, event)
- } while (event == barrier->curr_event);
- }
-
- if (atomic_increment_val (barrier->left) == barrier->init_count)
- lll_unlock(barrier->lock);
-
- return result;
-}