example.c 859 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. struct fibo {
  5. int limit;
  6. int answer;
  7. };
  8. int
  9. fib(int n)
  10. {
  11. int i=0;
  12. if (n==1 || n==0) return 1;
  13. for(i=0;i<n;i++){
  14. return (fib(n-1) + fib(n-2));
  15. }
  16. return (-1);
  17. }
  18. void*
  19. runner1(void* arg)
  20. {
  21. struct fibo* fibl = (struct fibo*) arg;
  22. fibl->answer = fib(fibl->limit);
  23. pthread_exit(0);
  24. }
  25. int
  26. main (int argc, char** argv)
  27. {
  28. int i;
  29. pthread_t id[argc];
  30. pthread_attr_t attr;
  31. struct fibo d[argc];
  32. if (argc < 2) {
  33. printf("usage: %s num1 num2 num3... numN", argv[0]);
  34. return (1);
  35. }
  36. pthread_attr_init(&attr);
  37. for (i=1; i<argc;i++){
  38. d[i-1].limit = atoi(argv[i]);
  39. d[i-1].answer = 0;
  40. pthread_create(&id[i-1], &attr, runner1, &d[i-1]);
  41. }
  42. for (i=0;i<argc-1;i++){
  43. pthread_join(id[i], NULL);
  44. printf("\n\nFib of limit: %d is %d", d[i].limit, d[i].answer);
  45. }
  46. return (0);
  47. }