Bir sayı çift 2'ye bölünmüşse, ancak sayı tek ise, sayı 3 ile çarpılır ve sonra tek tek eklenirse Collatz Conjecture için iş parçacığı kullanmaya çalışıyorum. Sonunda, sayı sıfıra eşit olacaktır. Linux, VI ve C kullanıyorum. Sorunum, runner'a ana işlev hatası içinde tanımlanmamış bir referans almamdır. Kodum:pthreads içindeki koşucunun tanımlanmamış referansı
#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);
}
}
Siz haklısınız. Görünüşe göre başka bir göze ihtiyacım vardı. – Robert