1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_
6#define FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_
7
8#include <mutex>
9
10namespace fml {
11
12// A wrapper for an object instance that can be read or written atomically.
13template <typename T>
14class AtomicObject {
15 public:
16 AtomicObject() = default;
17 AtomicObject(T object) : object_(object) {}
18
19 T Load() const {
20 std::scoped_lock lock(mutex_);
21 return object_;
22 }
23
24 void Store(const T& object) {
25 std::scoped_lock lock(mutex_);
26 object_ = object;
27 }
28
29 private:
30 mutable std::mutex mutex_;
31 T object_;
32};
33
34} // namespace fml
35
36#endif // FLUTTER_FML_SYNCHRONIZATION_ATOMIC_OBJECT_H_
37