foo.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4. #include "example.h"
  5. #include "example2.h"
  6. int
  7. example1 (int argc, char** argv)
  8. {
  9. int i;
  10. pthread_t id[argc];
  11. pthread_attr_t attr;
  12. struct fibo d[argc];
  13. if (argc < 2) {
  14. printf("usage: %s num1 num2 num3... numN", argv[0]);
  15. return (1);
  16. }
  17. pthread_attr_init(&attr);
  18. for (i=1; i<argc;i++){
  19. d[i-1].limit = atoi(argv[i]);
  20. d[i-1].answer = 0;
  21. pthread_create(&id[i-1], &attr, runner1, &d[i-1]);
  22. }
  23. for (i=0;i<argc-1;i++){
  24. pthread_join(id[i], NULL);
  25. printf("\n\nFib of limit: %d is %d", d[i].limit, 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. example2(argc, argv);
  47. }