foo.c 1.1 KB

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