Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)

 samyx 15Oct2010 20:34

Hey everyone,

I am just starting to learn about threads, and I am trying to write a thread to compute fibonacci and return an indicated fibonacci number. I have to use pthread_join to wait and collect the returned value, and then print it.

Hereis what I have so far, but I am stuck, it keeps giving me the error
" fibon.c: (.text+0x65): undefined reference to `fibonacci'
collect2: ld returned 1 exit status"

Code:

```#include <pthread.h> #include <stdio.h> /* compute sucessive fibonnaci numbers.*/ void* fibonacci(void* arg); main() {         pthread_t thread;         int num1 = 0;         int num2 = 1;;         int ans;         int which_fibo;         int counter, numPrint;         numPrint = 10;         for(counter= 0; counter < numPrint; ++counter){  ans = (num1 + num2);                 num1 = num2;                 num2 = ans;         }         /* start the computing thread up to the number you want to return*/         pthread_create(&thread, NULL, &fibonacci, (void*)&which_fibo);         /* wait for the fibonacci thread to complete */         pthread_join(thread, (void*)&ans);         /* print the number in the position requested */         printf("the  number is %d.\n",which_fibo, ans);  }```

 samyx 15Oct2010 22:20

Some progress...Now my program is printing 2 positions ahead. For exemplo:

0 1 1 2 3 5 8 13

If I select to print position 3, the result would be 3.
If I select to print position 4, the result would be 5.ow

How can I fix this problem, and how can I return the value if the position selected is 1 or 2?

#include <stdio.h>

/* compute sucessive fibonnaci numbers.*/

void* fibonacci(void* arg){
int num1 = 1;
int num2 = 1;;
int ans;
int maxfibo=10;
int n = *((int*) arg);
int is_num = 1;

int counter;

for(counter= 0; counter < (maxfibo-2); ++counter){

ans = (num1 + num2);
num1 = num2;
num2 = ans;
if (is_num) {
if (--n==0)
return (void*) ans;
}
}
}
int main ()
{
int which_fibo = 5;
int number;

/* start the computing thread up to the number you want to return*/

/* wait for the fibonacci thread to complete */