example.c 956 B

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