我正在编写一些线程化的 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() 函数中可以安全地访问 args。写在构造函数中,然后在单独的函数中创建线程就够了吗?或者我是否需要一个内存栅栏,我如何制作一个内存栅栏以确保所有 3 个 args 都由主线程写入,然后由 Worker 线程读取?
谢谢你的帮助!