C 由于pthread_join不工作,有人能告诉我错误吗

C 由于pthread_join不工作,有人能告诉我错误吗,c,multithreading,pthreads,C,Multithreading,Pthreads,另外,我还想补充一点,我不想使用信号量或任何其他同步工具来完成这项工作。创建所有线程,然后像下面那样加入它们:- return (void*)sum;//variable that stores sum pthread\u join的第二个参数是一个void**,即它需要一个指向void*的指针,该指针被解除引用以存储值。因为您没有传递变量的地址,所以此函数将尝试使用您传递的任何值作为地址(可能无效)并取消引用它。这引起了人们的注意 另外,第一个参数的类型是pthread\u t,但是您正在传

另外,我还想补充一点,我不想使用信号量或任何其他同步工具来完成这项工作。

创建所有线程,然后像下面那样加入它们:-

return (void*)sum;//variable that stores sum

pthread\u join
的第二个参数是一个
void**
,即它需要一个指向
void*
的指针,该指针被解除引用以存储值。因为您没有传递变量的地址,所以此函数将尝试使用您传递的任何值作为地址(可能无效)并取消引用它。这引起了人们的注意

另外,第一个参数的类型是
pthread\u t
,但是您正在传递一个指向
pthread\u t
的指针

您还声明了与正在调用的函数同名的局部变量。因此,当您调用
pthread_create(&thread2,0,&oddsum,(void*)obj)
实际上传递的是名为
oddsum
的本地
int
变量,而不是名为
oddsum
的函数。这就是它挂起来的原因

更改变量的名称以保存结果,更改
pthread\u join
调用以传递这些变量的地址,并直接传递线程ID,这些都应该有效:

pthread_create(&thread1,0,&evensum,(void*)obj);
pthread_create(&thread2,0,&oddsum,(void*)obj);

pthread_join(&thread1,(void**)evensum);
pthread_join(&thread2,(void**)oddsum);
然而,检索结果的正确方法是传递实际
void*
变量的地址并转换它们:

int evenresult;
pthread_join(thread,(void**)&evenresult);
...
int oddresult;
pthread_join(thread2,(void**)&oddresult);

您想解释一下原因吗?
pthread\u join(&thread1,&result)
&thread1
打字错误?语法变为
intpthread\u-join(pthread\u-tid,void**ret)你真正的问题是什么“另一个线程从未创建”这是什么意思?它崩溃了?它存在吗?电脑着火了?还有什么吗?我的意思是,线程的函数永远不会被调用,终端在打印偶数元素的和之后就停止了,这是在pthread_join(&thread,(void**)evensum)之后。它打印值0并在那里停止,主线程不终止。抱歉,如果我把您弄糊涂了,因为为了简洁起见,我省略了这一行。
pthread\u join(&thread,&result)
&线程
打字错误?语法变为
intpthread\u-join(pthread\u-tid,void**ret)@kiranBiradar是的,我错过了。更新。修复了与线程未终止相关的问题。谢谢
int evenresult;
pthread_join(thread,(void**)&evenresult);
...
int oddresult;
pthread_join(thread2,(void**)&oddresult);
int evenresult, oddresult;
void *result;
pthread_join(thread, &result);
evensum = (intptr_t)result;
...
pthread_join(thread2, &result);
oddsum = (intptr_t)result;