在多线程环境中将局部变量作为const引用传递

时间:2014-01-27 16:36:19

标签: c++ multithreading memory-management

我有一个线程,它会为它产生的每个作业获取一些本地数据。我想检查是否可以通过引用“局部变量”来传递给作业(仿函数)

例如,

ThreadPool tp;

void func(){

Employee emp;
tp.enqueueJob(bind(&foo,emp));

}


void foo(const Employee &emp){
//Access emp when the job is executed.
}

所以,问题是,根据标准,我可以保证在控件超出Employee后从foo执行作业时可以访问func记录吗? / p>

我知道假设一旦我们离开块就可以访问局部变量是不安全的,但只是想检查一下,因为有些编译器允许将局部变量作为const引用返回。

1 个答案:

答案 0 :(得分:2)

bind(&foo,emp)

它接受emp的副本,并将该函数作为参数调用。

如果这就是你想要的,那么一切都很好。如果您希望该函数对emp本身起作用,那么您需要:

  • 绑定到引用bind(&foo, std::ref(emp))
  • 确保对象持续到函数完成为止
  • 小心同步线程之间的访问