将局部变量传递给thrd_create

问题描述 投票:0回答:1

想象一下:

int foo(void* arg) {
    int v = *(int*)arg; // is arg a potential dangling pointer here?
}

thrd_t t;

int bar() {
   int my_variable = 42;
   int ret = thrd_create(&t,foo,&my_variable);
   return ret;
}

这里的执行顺序是什么?由于

foo
在不同的线程上运行,并且我们实际上并不等待线程完成/加入 - 但 thrd_create 返回 -
arg
是一个潜在的悬空指针吗?

c multithreading c11
1个回答
0
投票

在这种情况下,可能是一个悬空指针...这取决于线程是否在

bar
函数返回之前运行并复制值(
my_variable
的生命周期结束)。所以你所面临的是数据竞赛

如果您只想传递值,更好的IDE是使用一些显式转换将值本身作为值传递:

thrd_create(..., (void *) (intptr_t) my_variable);

还有

int foo(void *arg)
{
    int value = (int) (intptr_t) arg;
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.