gpt4 book ai didi

c - 未定义对 pthreads 中运行器的引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:33 26 4
gpt4 key购买 nike

我正在尝试将线程用于 Collat​​z 猜想,该猜想指出如果一个数字是偶数,则将其除以 2,但如果该数字是奇数,则该数字将乘以 3,然后再乘以 1。最终,该数字将等于零。我正在使用 Linux 和 VI 和 C。我的问题是我在主函数错误中不断得到对 runner 的 undefined reference 。我的代码:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int num;
void *runner(void *);
struct pt{
long num[100];
int size;
}shared;

int main(int argc, char **argv) {
pthread_t tid;
pthread_attr_t attr;

struct pt *shared_info = &shared;

if(argc != 2) {
fprintf(stderr, "usage: a.out <integer value>\n");
return -1;
}
if(atoi(argv[1]) <= 0) {
fprintf(stderr, "%d must be > 0\n", atoi(argv[1]));
return -2;
}

shared_info -> size = atoi(argv[1]);
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, (void *)shared_info);
pthread_join (tid,NULL);

int i;
for(i = 0; i < (*shared_info).size - 1; i++)
printf("%ld,",(*shared_info).num[i]);
printf("%d\n", (*shared_info).num[(*shared_info).size - 1]);
return 0;

void *runner(void *param) {
struct pt * shared_info = (struct pt*) param;
int x = shared_info -> size;
int i = 0;

while((shared_info -> num[i-1]) != 1) {
if(x % 2 ==0) {
x /= 2;
}
else {
x = x * 3 + 1;

}
}
shared_info -> size = i;
pthread_exit(0);
}
}

最佳答案

你放错了一个“}”,你必须把最后一个“}”移到“return 0;”之后

而且你的循环将是无限的,因为你让它一直运行到“1”,而它应该一直运行到“0”。

关于c - 未定义对 pthreads 中运行器的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538279/

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