#ifndef READ_WRITE_LOCK
#define READ_WRITE_LOCK

#include <pthread.h>

namespace nbody {
	class ReadWriteLock {
	protected:
		pthread_mutex_t mutex;
		pthread_rwlock_t rwlock;
		pthread_t* owner;
	public:
		ReadWriteLock();
		virtual ~ReadWriteLock();
		virtual bool readLock(pthread_t* myThread);
		virtual bool writeLock(pthread_t* myThread);
		virtual bool upgradeToWriteLock(pthread_t* myThread);
		virtual bool downgradeToReadLock(pthread_t* myThread);
		virtual bool unLock(pthread_t* myThread);
	};
}

#endif
