35 // The number of threads waiting on or about to wait on the semaphore.
36 volatile int _waiters;
37 // The number of threads in the wait path, before or after the tag check.
38 // These threads can become waiters.
39 volatile int _barrier_threads;
40 Semaphore _sem_barrier;
41
42 // Prevent copying and assignment of GenericWaitBarrier instances.
43 GenericWaitBarrier(const GenericWaitBarrier&);
44 GenericWaitBarrier& operator=(const GenericWaitBarrier&);
45
46 int wake_if_needed();
47
48 public:
49 GenericWaitBarrier() : _barrier_tag(0), _waiters(0), _barrier_threads(0), _sem_barrier(0) {}
50 ~GenericWaitBarrier() {}
51
52 const char* description() { return "semaphore"; }
53
54 void arm(int barrier_tag);
55 void disarm();
56 void wake();
57 void wait(int barrier_tag);
58 };
59
60 #endif // SHARE_UTILITIES_WAITBARRIER_GENERIC_HPP
|
35 // The number of threads waiting on or about to wait on the semaphore.
36 volatile int _waiters;
37 // The number of threads in the wait path, before or after the tag check.
38 // These threads can become waiters.
39 volatile int _barrier_threads;
40 Semaphore _sem_barrier;
41
42 // Prevent copying and assignment of GenericWaitBarrier instances.
43 GenericWaitBarrier(const GenericWaitBarrier&);
44 GenericWaitBarrier& operator=(const GenericWaitBarrier&);
45
46 int wake_if_needed();
47
48 public:
49 GenericWaitBarrier() : _barrier_tag(0), _waiters(0), _barrier_threads(0), _sem_barrier(0) {}
50 ~GenericWaitBarrier() {}
51
52 const char* description() { return "semaphore"; }
53
54 void arm(int barrier_tag);
55 void wake();
56 void wait(int barrier_tag);
57 };
58
59 #endif // SHARE_UTILITIES_WAITBARRIER_GENERIC_HPP
|