【发布时间】:2018-02-01 05:23:52
【问题描述】:
这主要是关于范围和线程的问题。假设我们有以下结构。
struct Test
{
int number;
std::string name;
};
此结构的实例将用作 pthread_create 函数中的参数。这是一个可能看起来像的示例。
pthread_t tid[5];
for(int i = 0; i < 5; ++i)
{
Test test;
test.number = 5;
test.name = "test";
pthread_create(&tid[i], NULL, func, (void *)&test);
}
这可以接受吗?由于 test 是在 for 的范围内声明的,这意味着我们只能依赖它在 for 循环的单次迭代中存在。
当调用 pthread_create 时,会给出一个指向 test 的指针作为参数。这意味着 func 正在接收与传递给 pthread_create 相同的指针。这意味着当 test 超出范围时,我们不能再依赖指向 test 的指针。如果我们要创建更多的局部变量,从而更改堆栈,则指针指向的位置将被那些新的局部变量覆盖。它是否正确?
【问题讨论】: