| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- // Filename: psemaphore.h
- // Created by: drose (13Oct08)
- //
- ////////////////////////////////////////////////////////////////////
- //
- // PANDA 3D SOFTWARE
- // Copyright (c) Carnegie Mellon University. All rights reserved.
- //
- // All use of this software is subject to the terms of the revised BSD
- // license. You should have received a copy of this license along
- // with this source code in a file named "LICENSE."
- //
- ////////////////////////////////////////////////////////////////////
- #ifndef PSEMAPHORE_H
- #define PSEMAPHORE_H
- #include "pandabase.h"
- #include "pmutex.h"
- #include "conditionVar.h"
- ////////////////////////////////////////////////////////////////////
- // Class : Semaphore
- // Description : A classic semaphore synchronization primitive.
- //
- // A semaphore manages an internal counter which is
- // decremented by each acquire() call and incremented by
- // each release() call. The counter can never go below
- // zero; when acquire() finds that it is zero, it
- // blocks, waiting until some other thread calls
- // release().
- ////////////////////////////////////////////////////////////////////
- class EXPCL_PANDA_PIPELINE Semaphore {
- PUBLISHED:
- INLINE Semaphore(int initial_count = 1);
- INLINE ~Semaphore();
- private:
- INLINE Semaphore(const Semaphore ©);
- INLINE void operator = (const Semaphore ©);
- PUBLISHED:
- BLOCKING INLINE void acquire();
- BLOCKING INLINE bool try_acquire();
- INLINE int release();
- INLINE int get_count() const;
- void output(ostream &out) const;
- private:
- Mutex _lock;
- ConditionVar _cvar;
- int _count;
- };
- INLINE ostream &
- operator << (ostream &out, const Semaphore &sem) {
- sem.output(out);
- return out;
- }
- #include "psemaphore.I"
- #endif
|