У меня есть класс, копии которого разделяют те же данные через shared_ptr
. Поскольку эти данные будут модифицироваться различными потоками, я буду использовать мьютекс для его защиты, однако, насколько я понимаю, объект мьютекса должен быть одинаковым для разных копий, чтобы работать, игнорируя тот факт, что мьютексы на самом деле не копируются.
Поэтому я намерен также включить мьютекс в shared_ptr
. Вот так:
#pragma once
#include <mutex>
#include <memory>
#include <vector>
class test {
public:
auto some_action(int x) -> void {
std::scoped_lock(*m_store_mutex);
m_shared_store->push_back(x);
}
private:
std::shared_ptr<std::mutex> m_store_mutex { std::make_shared<std::mutex>() };
std::shared_ptr<std::vector<int>> m_shared_store { std::make_shared<std::vector<int>>() };
};
Является ли этот подход действительным? Вроде бы работает, но хотелось бы быть уверенным.
приписка
Этот вопрос довольно похож на мой, но я не чувствую, что ответы достаточно конкретны.