60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
//
|
|
// 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
|