mirror of https://git.suyu.dev/suyu/suyu
SynchronizedWrapper: Add Lock convenience method
This commit is contained in:
parent
1b28b26682
commit
21f4f49c7a
|
@ -9,25 +9,8 @@
|
||||||
|
|
||||||
namespace Common {
|
namespace Common {
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no
|
|
||||||
* one forgets to lock a mutex before acessing an object. To access the wrapped object construct a
|
|
||||||
* SyncronizedRef on this wrapper. Inspired by Rust's Mutex type
|
|
||||||
* (http://doc.rust-lang.org/std/sync/struct.Mutex.html).
|
|
||||||
*/
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class SynchronizedWrapper {
|
class SynchronizedWrapper;
|
||||||
public:
|
|
||||||
template <typename... Args>
|
|
||||||
SynchronizedWrapper(Args&&... args) : data(std::forward<Args>(args)...) {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
template <typename U>
|
|
||||||
friend class SynchronizedRef;
|
|
||||||
|
|
||||||
std::mutex mutex;
|
|
||||||
T data;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronized reference, that keeps a SynchronizedWrapper's mutex locked during its lifetime. This
|
* Synchronized reference, that keeps a SynchronizedWrapper's mutex locked during its lifetime. This
|
||||||
|
@ -75,4 +58,28 @@ private:
|
||||||
SynchronizedWrapper<T>* wrapper;
|
SynchronizedWrapper<T>* wrapper;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps an object, only allowing access to it via a locking reference wrapper. Good to ensure no
|
||||||
|
* one forgets to lock a mutex before acessing an object. To access the wrapped object construct a
|
||||||
|
* SyncronizedRef on this wrapper. Inspired by Rust's Mutex type
|
||||||
|
* (http://doc.rust-lang.org/std/sync/struct.Mutex.html).
|
||||||
|
*/
|
||||||
|
template <typename T>
|
||||||
|
class SynchronizedWrapper {
|
||||||
|
public:
|
||||||
|
template <typename... Args>
|
||||||
|
SynchronizedWrapper(Args&&... args) : data(std::forward<Args>(args)...) {}
|
||||||
|
|
||||||
|
SynchronizedRef<T> Lock() {
|
||||||
|
return {*this};
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <typename U>
|
||||||
|
friend class SynchronizedRef;
|
||||||
|
|
||||||
|
std::mutex mutex;
|
||||||
|
T data;
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace Common
|
} // namespace Common
|
||||||
|
|
Loading…
Reference in New Issue