ADD: made data threadsafe

This commit is contained in:
Henry Winkel
2023-08-10 17:18:36 +02:00
parent ed14aedf0c
commit e922d47197

View File

@@ -1,29 +1,57 @@
#pragma once #pragma once
#include <chrono> #include <chrono>
#include <mutex>
namespace SimCore namespace SimCore
{ {
template <typename T> template <typename T>
class Data{ class Data{
private:
T data_;
bool valid_;
std::uint64_t writeTime_;
public: public:
Data():valid_(false),writeTime_(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count()) Data():mx(),valid_(false),writeTime_(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count())
{ {
} }
Data (const Data &other)
{
std::lock_guard<std::mutex> guard(other.mx);
if (typeid(other.data_) == typeid(data_))
{
data_ = other.data_;
valid_ = true;
writeTime_ = other.writeTime_;
}else
{
valid_ = false;
}
}
Data& operator=(const Data other)
{
std::lock_guard<std::mutex> lock(other.mx);
if (typeid(other.data_) == typeid(data_))
{
this->data_ = other.data_;
this->valid_ = other.valid_;
this->writeTime_ = other.writeTime_;
}else
{
this->valid_ = false;
}
return *this;
}
void setValue(T value) void setValue(T value)
{ {
std::lock_guard<std::mutex> guard(mx);
data_ = value; data_ = value;
valid_ = true; valid_ = true;
writeTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); writeTime_ = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
@@ -31,6 +59,7 @@ namespace SimCore
T getValue() T getValue()
{ {
std::lock_guard<std::mutex> guard(mx);
return data_; return data_;
} }
@@ -42,13 +71,24 @@ namespace SimCore
bool isValid() bool isValid()
{ {
std::lock_guard<std::mutex> guard(mx);
return valid_; return valid_;
} }
std::uint64_t getWriteTime() std::uint64_t getWriteTime()
{ {
std::lock_guard<std::mutex> guard(mx);
return writeTime_; return writeTime_;
} }
private:
T data_;
bool valid_;
std::uint64_t writeTime_;
mutable std::mutex mx;