gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:58:50 25 4
gpt4 key购买 nike

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

例如,

ThreadPool tp;

void func(){

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

}


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

所以,问题是,根据标准,我能否保证可以访问 Employeefoo 执行作业时记录控制出来后func

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

最佳答案

bind(&foo,emp)

它获取 emp 的拷贝并以该拷贝作为参数调用该函数。

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

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

关于c++ - 在多线程环境中将局部变量作为常量引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21386320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com