我正在关注https://computing.llnl.gov/tutorials/pthreads中的多线程教程, 并尝试使用提供的一些代码。
我使用了这个源文件https://computing.llnl.gov/tutorials/pthreads/samples/hello.c 然后将它添加到主函数中:
void * v;
v = (void *)t;
并替换了这一行:
rc = pthread_create(threads+t, NULL, PrintHello, (void*)t);
这样:
rc = pthread_create(threads+t, NULL, PrintHello, v)
可以说(我知道这不是一个好的论点:)),输出应该保持不变..但这是新的输出:
In main: creating thread 0
In main: creating thread 1
Hello World! It's me, thread #140734232544832!
In main: creating thread 2
In main: creating thread 3
Hello World! It's me, thread #140734232544832!
In main: creating thread 4
Hello World! It's me, thread #140734232544832!
Hello World! It's me, thread #140734232544832!
Hello World! It's me, thread #140734232544832!
线程#是垃圾!
有人可以向我解释这里发生了什么吗?为什么输出会改变?
是不是因为 t 是按值传递并在传递给 PrintHello 时进行转换,而现在,在更改之后我试图传递指针并且该指针的地址被正确传递 - 该地址不包含 t 包含的值,因为是本地的吗?
有人可以确认/拒绝并修正我的理论吗?