C++: Вызов метода другого класса с использованием указателя в безопасном потоке?
Я вызываю функцию-член внутри потока. У меня есть переменная-член, которую я редактирую внутри этой функции, для которой я применил блокировку. Подходит ли эта логика или даже чтение должно быть потокобезопасным?
Код примерно такой, как показано ниже:
#include <iostream>
#include <vector>
#include <mutex>
#include <future>
#include <memory>
using namespace std;
class A
{
int occurrence;
mutex m;
public:
A() = default;
void operation()
{
/*--
Some operations where I only read the class members other than occurrence but do not modify them.
--*/
{
lock_guard<mutex> my_lock(m);
occurence++;
}
}
int getOccurence()
{
return occurence;
}
};
class B
{
shared_ptr<A> a{};
public:
B(shared_ptr<A>& a_ptr)
{
a = a_ptr;
}
void callAoperation()
{
a->operation();
}
};
int main()
{
shared_ptr<A> a = make_shared<A>();
B* b = new B(a);
vector<std::future<void>> async_call;
int i = 0;
while (i < 10)
{
async_call.push_back(async(launch::async, &B::callAoperation, b));
i++;
}
for (auto&& fut : async_call)
{
fut.wait();
}
cout << a->getOccurence();
}
В моем методе работы я изменяю только одну переменную, другие я просто читаю. Переменная класса, которую я изменяю, находится внутри блокировки.
Я хочу знать, верна ли эта логика или у нее будут проблемы?