C++ 在多线程环境中作为常量引用传递局部变量

C++ 在多线程环境中作为常量引用传递局部变量,c++,multithreading,memory-management,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. } 因此,问题是,根据标准,在控制权退出func后,当从foo执

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

比如说,

ThreadPool tp;

void func(){

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

}


void foo(const Employee &emp){
//Access emp when the job is executed.
}
因此,问题是,根据标准,在控制权退出
func
后,当从
foo
执行作业时,是否保证我可以访问
Employee
记录

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

bind(&foo,emp)
它获取
emp
的一个副本,并用它作为参数调用函数

如果那是你想要的,那么一切都好。如果希望函数作用于
emp
本身,则需要:

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

明白了。快速提问,您的意思是bind将emp作为值传递给foo作为常量引用?(并使用std::ref确保bind也使用ref?@theAlias:没错
bind
生成一个包含其参数副本的对象,这些参数用作函数的参数
ref
提供了一个“引用包装器”类型,其作用类似于对其参数的引用。