为ling::shared_mutex添加setResource
This commit is contained in:
@@ -10,7 +10,6 @@
|
||||
#include <shared_mutex>
|
||||
|
||||
namespace ling {
|
||||
|
||||
template<typename T>
|
||||
class ResourceReadOnly;
|
||||
|
||||
@@ -37,6 +36,11 @@ namespace ling {
|
||||
|
||||
shared_mutex &operator=(const shared_mutex &) = delete;
|
||||
|
||||
void setResource(const T &&value) {
|
||||
ResourceCompletely<T> lock_completely = lock();
|
||||
this->resource = value;
|
||||
}
|
||||
|
||||
|
||||
ResourceReadOnly<CT> lock_shared() {
|
||||
mutex.lock_shared();
|
||||
@@ -63,11 +67,16 @@ namespace ling {
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T, typename ...Args>
|
||||
template<typename T, typename... Args>
|
||||
ling::shared_mutex<T> make_shared_mutex(Args &&... args) {
|
||||
return ling::shared_mutex<T>(std::move(T(std::forward<Args>(args)...)));
|
||||
}
|
||||
|
||||
template<typename T, typename CT, typename... Args>
|
||||
ling::shared_mutex<T, CT> make_shared_mutex(Args &&... args) {
|
||||
return ling::shared_mutex<T, CT>(std::move(T(std::forward<Args>(args)...)));
|
||||
}
|
||||
|
||||
/// 资源的读写代理
|
||||
template<typename T>
|
||||
class ResourceCompletely {
|
||||
@@ -77,11 +86,11 @@ namespace ling {
|
||||
|
||||
public:
|
||||
ResourceCompletely(std::shared_mutex *mutex, T *resource)
|
||||
: mutex(mutex), resource(resource) {
|
||||
: mutex(mutex), resource(resource) {
|
||||
}
|
||||
|
||||
ResourceCompletely()
|
||||
: mutex(nullptr), resource(nullptr) {
|
||||
: mutex(nullptr), resource(nullptr) {
|
||||
}
|
||||
|
||||
ResourceCompletely(const ResourceCompletely &) = delete;
|
||||
@@ -125,11 +134,11 @@ namespace ling {
|
||||
|
||||
public:
|
||||
ResourceReadOnly(std::shared_mutex *mutex, const T *const resource)
|
||||
: mutex(mutex), resource(resource) {
|
||||
: mutex(mutex), resource(resource) {
|
||||
}
|
||||
|
||||
ResourceReadOnly()
|
||||
: mutex(nullptr), resource(nullptr) {
|
||||
: mutex(nullptr), resource(nullptr) {
|
||||
}
|
||||
|
||||
ResourceReadOnly(const ResourceReadOnly &) = delete;
|
||||
@@ -162,10 +171,7 @@ namespace ling {
|
||||
const T *operator->() const {
|
||||
return resource;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
} // ling
|
||||
|
||||
#endif //DATASTRUCT_SHARED_MUTEX_H_04
|
||||
|
||||
Reference in New Issue
Block a user