foo.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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, d[i].answer);
  25. }
  26. return (0);
  27. }
  28. int example2(int argc, char **argv)
  29. {
  30. pthread_t id[2];
  31. pthread_attr_t attr;
  32. buffer buf;
  33. init_buffer(&buf);
  34. pthread_attr_init(&attr);
  35. pthread_create(&id[0], &attr, produce, &buf);
  36. pthread_create(&id[1], &attr, consume, &buf);
  37. pthread_join(id[0], NULL);
  38. pthread_join(id[1], NULL);
  39. sem_destroy(&buf.empty);
  40. pthread_mutex_destroy(&buf.mutex);
  41. printf("\nProgram finished");
  42. return (EXIT_SUCCESS);
  43. }
  44. int main(int argc, char **argv)
  45. {
  46. example2(argc, argv);
  47. }