equal
deleted
inserted
replaced
80 if (barrier_tag != _barrier_tag) { |
80 if (barrier_tag != _barrier_tag) { |
81 // API specifies wait() must provide a trailing fence. |
81 // API specifies wait() must provide a trailing fence. |
82 OrderAccess::fence(); |
82 OrderAccess::fence(); |
83 return; |
83 return; |
84 } |
84 } |
85 Atomic::add(1, &_barrier_threads); |
85 Atomic::add(&_barrier_threads, 1); |
86 if (barrier_tag != 0 && barrier_tag == _barrier_tag) { |
86 if (barrier_tag != 0 && barrier_tag == _barrier_tag) { |
87 Atomic::add(1, &_waiters); |
87 Atomic::add(&_waiters, 1); |
88 _sem_barrier.wait(); |
88 _sem_barrier.wait(); |
89 // We help out with posting, but we need to do so before we decrement the |
89 // We help out with posting, but we need to do so before we decrement the |
90 // _barrier_threads otherwise we might wake threads up in next wait. |
90 // _barrier_threads otherwise we might wake threads up in next wait. |
91 GenericWaitBarrier::wake_if_needed(); |
91 GenericWaitBarrier::wake_if_needed(); |
92 } |
92 } |
93 Atomic::add(-1, &_barrier_threads); |
93 Atomic::add(&_barrier_threads, -1); |
94 } |
94 } |