2016-04-11 24 views
1

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); 
} 
} 

cevap

1

Sen sonra hiç sonunda onlardan biri hareket etmek zorunda "}" a missplaced gelmiş "return 0;"

Ayrıca, döngü "sonsuz" olacaktır çünkü "0" olana kadar "1" olana kadar devam etmiş olursunuz.

+1

Siz haklısınız. Görünüşe göre başka bir göze ihtiyacım vardı. – Robert