// 线程安全数据类型。用于线程安全地读写指定类型的数据。
template<typename T>
class ThreadSafeData
{
public:
ThreadSafeData() = default;
ThreadSafeData(const T& data) { data_ = data; };
~ThreadSafeData() = default;
// 禁止拷贝构造和赋值
ThreadSafeData(const ThreadSafeData& other) = delete;
ThreadSafeData& operator=(const ThreadSafeData& other) = delete;
T read() const
{
std::shared_lock<std::shared_mutex> lock(mutex_);
return data_;
}
void write(const T& new_data)
{
std::unique_lock<std::shared_mutex> lock(mutex_);
data_ = new_data;
}
void update(const std::function<void(T& source_data)>& update_func)
{
std::unique_lock<std::shared_mutex> lock(mutex_);
update_func(data_);
}
private:
T data_; // 源数据。
mutable std::shared_mutex mutex_; // 互斥量,用于读写锁。
};