/workspaces/astro/sol3-sdk/cpp/sol3/cpp/thread_safe_value.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/cpp/thread_safe_value.h Source File
Space-ng SDK
thread_safe_value.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <mutex>
6 #include <shared_mutex>
7 #include <utility>
8 
9 namespace sol3::cpp {
10 
11 template <typename TData>
14  public:
15  ThreadSafeValue() = default;
16  explicit ThreadSafeValue(TData data) : data_(std::move(data)) {}
17 
18  // ThreadSafeValue<Foo> tv(std::in_place, arg1, arg2);
19  template <typename... TArgs>
20  explicit ThreadSafeValue(std::in_place_t in_place, TArgs&&... args)
21  : data_(std::forward<TArgs>(args)...) {
22  (void)in_place;
23  }
24 
26  template <typename TFunction>
27  auto mutate(TFunction&& cb) {
28  std::unique_lock<std::shared_mutex> lock(mtx_);
29  return std::forward<TFunction>(cb)(data_);
30  }
31 
33  template <typename TFunction>
34  auto access(TFunction&& cb) const {
35  std::shared_lock<std::shared_mutex> lock(mtx_);
36  return std::forward<TFunction>(cb)(data_);
37  }
38 
39  private:
40  mutable std::shared_mutex mtx_;
41  TData data_;
42 };
43 
44 } // namespace sol3::cpp
Small helper for read/write access to a value guarded by a shared mutex.
Definition: thread_safe_value.h:13
ThreadSafeValue(TData data)
Definition: thread_safe_value.h:16
auto mutate(TFunction &&cb)
Exclusive access; executes cb(TData&) under a unique_lock.
Definition: thread_safe_value.h:27
ThreadSafeValue(std::in_place_t in_place, TArgs &&... args)
Definition: thread_safe_value.h:20
auto access(TFunction &&cb) const
Shared/read-only access; executes cb(TData const&) under a shared_lock.
Definition: thread_safe_value.h:34
Definition: enum.h:8
Definition: shmem_buffer.h:219