mirror of
https://github.com/uroni/urbackup_backend.git
synced 2025-10-26 11:36:50 +00:00
35 lines
927 B
C++
35 lines
927 B
C++
#pragma once
|
|
|
|
#include "Mutex.h"
|
|
|
|
class ISharedMutex : public IObject
|
|
{
|
|
public:
|
|
virtual ILock* readLock()=0;
|
|
|
|
virtual ILock* writeLock()=0;
|
|
};
|
|
|
|
class IScopedWriteLock
|
|
{
|
|
public:
|
|
IScopedWriteLock(ISharedMutex *pMutex){ if(pMutex!=NULL)lock=pMutex->writeLock();else lock=NULL; }
|
|
~IScopedWriteLock(){ if(lock!=NULL) lock->Remove(); }
|
|
void relock(ISharedMutex *pMutex){ if(lock!=NULL) lock->Remove(); if(pMutex!=NULL)lock=pMutex->writeLock();else lock=NULL; }
|
|
ILock * getLock(){ return lock; }
|
|
|
|
private:
|
|
ILock *lock;
|
|
};
|
|
|
|
class IScopedReadLock
|
|
{
|
|
public:
|
|
IScopedReadLock(ISharedMutex *pMutex){ if(pMutex!=NULL)lock=pMutex->readLock();else lock=NULL; }
|
|
~IScopedReadLock(){ if(lock!=NULL) lock->Remove(); }
|
|
void relock(ISharedMutex *pMutex){ if(lock!=NULL) lock->Remove(); if(pMutex!=NULL)lock=pMutex->readLock();else lock=NULL; }
|
|
ILock * getLock(){ return lock; }
|
|
|
|
private:
|
|
ILock *lock;
|
|
}; |