Various services improved (#110)
This commit is contained in:
committed by
GitHub
parent
36bb25deba
commit
d52fe52d96
@@ -7,9 +7,13 @@
|
||||
#include "CoreTypes.h"
|
||||
#include "Thread.h"
|
||||
#include "RtosCompatSemaphore.h"
|
||||
#include "Check.h"
|
||||
#include <memory>
|
||||
|
||||
namespace tt {
|
||||
|
||||
class ScopedMutexUsage;
|
||||
|
||||
typedef enum {
|
||||
MutexTypeNormal,
|
||||
MutexTypeRecursive,
|
||||
@@ -30,6 +34,30 @@ public:
|
||||
TtStatus acquire(uint32_t timeout) const;
|
||||
TtStatus release() const;
|
||||
ThreadId getOwner() const;
|
||||
|
||||
std::unique_ptr<ScopedMutexUsage> scoped() const;
|
||||
};
|
||||
|
||||
class ScopedMutexUsage {
|
||||
|
||||
const Mutex& mutex;
|
||||
bool acquired = false;
|
||||
|
||||
public:
|
||||
|
||||
ScopedMutexUsage(const Mutex& mutex) : mutex(mutex) {}
|
||||
|
||||
~ScopedMutexUsage() {
|
||||
if (acquired) {
|
||||
tt_check(mutex.release() == TtStatusOk);
|
||||
}
|
||||
}
|
||||
|
||||
bool acquire(uint32_t timeout) {
|
||||
TtStatus result = mutex.acquire(timeout);
|
||||
acquired = (result == TtStatusOk);
|
||||
return acquired;
|
||||
}
|
||||
};
|
||||
|
||||
/** Allocate Mutex
|
||||
|
||||
Reference in New Issue
Block a user