blob: c5c25cb27cee55f30220f6ae0a02263b03f13204 [file] [log] [blame] [edit]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_
#define FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_
#include <mutex>
namespace fml {
// A wrapper for an object instance that can be read or written atomically.
template <typename T>
class AtomicObject {
public:
AtomicObject() = default;
explicit AtomicObject(T object) : object_(object) {}
T Load() const {
std::scoped_lock lock(mutex_);
return object_;
}
void Store(const T& object) {
std::scoped_lock lock(mutex_);
object_ = object;
}
private:
mutable std::mutex mutex_;
T object_;
};
} // namespace fml
#endif // FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_