| // |
| // Copyright 2005 The Android Open Source Project |
| // |
| // Inter-process semaphore. |
| // |
| // These are meant for IPC, not thread management. The Mutex and Condition |
| // classes are much lighter weight. |
| // |
| #ifndef __LIBS_SEMAPHORE_H |
| #define __LIBS_SEMAPHORE_H |
| |
| #ifdef HAVE_ANDROID_OS |
| #error DO NOT USE THIS FILE IN THE DEVICE BUILD |
| #endif |
| |
| namespace android { |
| |
| /* |
| * Platform-independent semaphore class. |
| * |
| * Each object holds a single semaphore. |
| * |
| * The "key" is usually the process ID of the process that created the |
| * semaphore (following POSIX semantics). See the comments in shmem.h. |
| */ |
| class Semaphore { |
| public: |
| Semaphore(void); |
| virtual ~Semaphore(void); |
| |
| /* |
| * Create a new semaphore, with the specified initial value. The |
| * value indicates the number of resources available. |
| */ |
| bool create(int key, int initialValue, bool deleteExisting); |
| |
| /* |
| * Attach to an existing semaphore. |
| */ |
| bool attach(int key); |
| |
| /* |
| * Acquire or release the semaphore. |
| */ |
| void acquire(void); |
| void release(void); |
| bool tryAcquire(void); // take a timeout? |
| |
| private: |
| bool adjust(int adj, bool wait); |
| |
| unsigned long mHandle; // semid(int) or HANDLE |
| bool mCreator; |
| int mKey; |
| }; |
| |
| }; // namespace android |
| |
| #endif // __LIBS_SEMAPHORE_H |