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();

}

В моем методе работы я изменяю только одну переменную, другие я просто читаю. Переменная класса, которую я изменяю, находится внутри блокировки.

Я хочу знать, верна ли эта логика или у нее будут проблемы?

0 ответов

Другие вопросы по тегам