C ++ 11 Quando usar uma cerca de memória?

Eu estou escrevendo algum código C ++ 11 threaded, e eu não estou totalmente certo sobre quando eu preciso usar uma cerca de memória ou algo assim. Então, aqui está basicamente o que estou fazendo:

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;
}

Eu queria saber, quais etapas eu preciso tomar para se certificar de que os argumentos são seguros para acessar na função Work () que é executado em outro thread. É suficiente que esteja escrito no construtor e, em seguida, o segmento é criado em uma função separada? Ou eu preciso de uma cerca de memória, e como eu faço uma cerca de memória para se certificar de que todos os 3 args são escritos pelo thread principal e, em seguida, lido pelo thread de trabalho?

Obrigado por qualquer ajuda!

questionAnswers(1)

yourAnswerToTheQuestion