10Duke Scale C++ Client
Loading...
Searching...
No Matches
GuardWithTimeout.h
1#ifndef TENDUKE_CONCURRENT_GUARDWITHTIMEOUT_H
2#define TENDUKE_CONCURRENT_GUARDWITHTIMEOUT_H
3
4#include <mutex>
5#include <cstdint>
6#include <chrono>
7
8namespace tenduke { namespace concurrent {
9
14template <typename TIMED_MUTEX>
16{
17public:
23 GuardWithTimeout(TIMED_MUTEX &mutex, std::chrono::milliseconds timeout)
24 : mutex(mutex), timedout(false)
25 {
26 if (!mutex.try_lock_for(timeout)) {
27 timedout = true;
28 }
29 }
30
31 virtual ~GuardWithTimeout()
32 {
33 if (!timedout) {
34 mutex.unlock();
35 }
36 }
37
42 bool hasTimedout() const
43 {
44 return timedout;
45 }
46
47private:
48 TIMED_MUTEX &mutex;
49 bool timedout;
50};
51
56
57}}
58
59#endif //TENDUKE_CONCURRENT_GUARDWITHTIMEOUT_H
A mutex-guard with timeout functionality.
Definition GuardWithTimeout.h:16
GuardWithTimeout(TIMED_MUTEX &mutex, std::chrono::milliseconds timeout)
Constructs new instance: Tries to lock the mutex.
Definition GuardWithTimeout.h:23
bool hasTimedout() const
Checks if the guard failed beaause of timeout.
Definition GuardWithTimeout.h:42
GuardWithTimeout< std::recursive_timed_mutex > RecursiveGuardWithTimeout
Recursive implementation of GuardWithTimeout.
Definition GuardWithTimeout.h:55
Root for classes, functions and globals of 10Duke C++ Client.
Definition BackendConfiguration.h:7