pthreads只能共享全球资源吗?

ldo*_*dog 4 multithreading pthreads

我正在尝试在两个不是全局变量的线程之间共享一个结构.变量本身在main函数的堆栈上实例化,然后在两个线程启动时将其指针作为参数传递给两个线程.

什么我发现是,当我改变这种结构改变的成员的值没有反映在其他并行线程.有没有办法在两个线程之间共享一个非全局变量(例如一个整数),这样在一个线程中对该变量进行的更改会出现在另一个线程中?

这都是因为我想避免为代码可维护性添加全局变量.

bro*_*ool 8

请记住,线程获得自己的堆栈 - 所以如果你传入一个整数并且函数超出范围,那么你指的是现在拥有完全不同的内存.

void foo(void)
{
    pthread_t t1, t2;
    struct foo common_value;

    if (pthread_create(&t1, NULL, a, &common_value) != 0)
    {
        return -1;
    }    

    if (pthread_create(&t2, NULL, b, &common_value) != 0)
    {
        return -1;
    }    

    // upon exiting this function, common_value is no longer what you think it is!
}
Run Code Online (Sandbox Code Playgroud)