スレッド化された C++11 コードを書いていますが、メモリ フェンスなどをいつ使用する必要があるか完全にはわかりません。だからここに基本的に私がやっていることです:
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;
}
別のスレッドで実行される Work() 関数で引数に安全にアクセスできるようにするには、どのような手順を実行する必要があるのか 疑問に思っていました。コンストラクターに記述して、別の関数でスレッドを作成するだけで十分ですか? または、メモリ フェンスが必要ですか? 3 つの引数すべてがメイン スレッドによって書き込まれ、ワーカー スレッドによって読み取られるようにメモリ フェンスを作成するにはどうすればよいですか?
助けてくれてありがとう!