C ++ 11 Kiedy używać ogrodzenia pamięci?

Piszę trochę wątkowego kodu C ++ 11 i nie jestem do końca pewien, kiedy muszę użyć ogrodzenia pamięci lub czegoś takiego. Oto co robię:

class Worker
{
   std::string arg1;
   int arg2;
   int arg3;
   std::thread thread;

public:
   Worker( std::string arg1, int arg2, int arg3 )
   {
      this->arg1 = arg1;
      this->arg2 = arg2;
      this->arg3 = arg3;
   }

   void DoWork()
   {
      this->thread = std::thread( &Worker::Work, this );
   }

private:
   Work()
   {
      // Do stuff with args
   }
}

int main()
{
   Worker worker( "some data", 1, 2 );
   worker.DoWork();

   // Wait for it to finish
   return 0;
}

Zastanawiałem się, jakie kroki muszę podjąć, aby mieć pewność, że dostęp do argumentów jest bezpieczny w funkcji Work () działającej na innym wątku. Czy wystarczy, że jest zapisany w konstruktorze, a następnie wątek jest tworzony w osobnej funkcji? A może potrzebuję ogrodzenia pamięci i jak zrobić ogrodzenie pamięci, aby upewnić się, że wszystkie trzy argumenty są zapisywane przez główny wątek, a następnie odczytywane przez wątek Worker?

Dzięki za pomoc!

questionAnswers(1)

yourAnswerToTheQuestion