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
#include <chrono>
#include <mutex>
namespace SimCore
{
template <typename T>
class Data{
private:
T data_;
bool valid_;
std::uint64_t writeTime_;
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)
{
std::lock_guard<std::mutex> guard(mx);
data_ = value;
valid_ = true;
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()
{
std::lock_guard<std::mutex> guard(mx);
return data_;
}
@@ -42,13 +71,24 @@ namespace SimCore
bool isValid()
{
std::lock_guard<std::mutex> guard(mx);
return valid_;
}
std::uint64_t getWriteTime()
{
std::lock_guard<std::mutex> guard(mx);
return writeTime_;
}
private:
T data_;
bool valid_;
std::uint64_t writeTime_;
mutable std::mutex mx;