gpt4 book ai didi

c - 在 C 中重新连接线程

转载 作者:行者123 更新时间:2023-11-30 14:29:17 25 4
gpt4 key购买 nike

在我的主函数中,我生成了 j 个线程,它们都并行计算相同的任务 - 然后我想等待它们完成后再退出。

int main(...) {

// ...

int threads = 6;
pthread_t* thread = malloc(sizeof(pthread_t)*threads);

for(i = 0; i < threads; i++) {

struct thread_param *tp;
tp = malloc(sizeof(*tp));

// ...

int ret = pthread_create(&thread[i], NULL, &control, (void*)tp);

if(ret != 0) {
printf ("Create pthread error!\n");
exit (1);
}
}

for (j = 0; j < threads; j++) {
printf("JOINING THREAD: %i\n", j);
pthread_join( &thread[j], NULL);
}

exit(0);
}

但是,没有什么可以等待。 Main 只是退出而没有完成线程任务。我错过了什么吗?

最佳答案

嘿,尝试一下pthread_join(thread[j], NULL);我认为问题出在类型上。我检查了文档:

int pthread_join(pthread_t 线程,void **value_ptr);

threadp_thread*thread[j]p_thread,而&thread [j]p_thread*,这是无效的。可能会发生内部错误。

编辑:是的,我对此非常肯定,pthread_t 基本上是 int,所以 pthread_t*被接受,它只是无效的线程句柄,因此 pthread_join 在内部失败。

关于c - 在 C 中重新连接线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4987072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com