Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6. #include <errno.h>
  7. #include <pthread.h>
  8. #include <fcntl.h>
  9. #include <sys/stat.h>
  10. #include <semaphore.h>
  11. #include <unistd.h>
  12. /* widelce */
  13. sem_t widelec_1;
  14. sem_t widelec_2;
  15. sem_t widelec_3;
  16. sem_t widelec_4;
  17. sem_t widelec_5;
  18. sem_t prt;
  19. /* uczta filozofow */
  20. void *Jedzenie(void *arg)
  21. {
  22. int j;
  23. int porcja_nr;
  24. int Filozof_nr = *((int *) arg);
  25. for(j=0;j<20;j++)
  26. {
  27.  
  28. /*pierwszy filozof */
  29. if(Filozof_nr==0)
  30. {
  31. sem_wait(&prt);
  32. porcja_nr=j+1;
  33. printf("Jestem filozof 1 i mysle po raz %d\n",porcja_nr);
  34. sem_post(&prt);
  35. sem_wait(&widelec_1);
  36. sem_wait(&widelec_2);
  37. sem_wait(&prt);
  38. porcja_nr=j+1;
  39. printf("Jestem filozof 1 i jem po raz %d.\n",porcja_nr);
  40. sem_post(&prt);
  41. sem_post(&widelec_1);
  42. sem_post(&widelec_2);
  43. }
  44.  
  45. /*drugi filozof */
  46. if(Filozof_nr==1)
  47. {
  48. sem_wait(&prt);
  49. porcja_nr=j+1;
  50. printf("Jestem filozof 2 i mysle po raz %d\n",porcja_nr);
  51. sem_post(&prt);
  52. sem_wait(&widelec_3);
  53. sem_wait(&widelec_2);
  54. sem_wait(&prt);
  55. porcja_nr=j+1;
  56. printf("Jestem filozof 2 i jem po raz %d.\n",porcja_nr);
  57. sem_post(&prt);
  58. sem_post(&widelec_2);
  59. sem_post(&widelec_3);
  60. }
  61.  
  62. /* trzeci filozof */
  63. if(Filozof_nr==2)
  64. {
  65. sem_wait(&prt);
  66. porcja_nr=j+1;
  67. printf("Jestem filozof 3 i mysle po raz %d\n",porcja_nr);
  68. sem_post(&prt);
  69. sem_wait(&widelec_3);
  70. sem_wait(&widelec_4);
  71. sem_wait(&prt);
  72. porcja_nr=j+1;
  73. printf("Jestem filozof 3 i jem po raz %d.\n",porcja_nr);
  74. sem_post(&prt);
  75. sem_post(&widelec_4);
  76. sem_post(&widelec_3);
  77. }
  78.  
  79. /* czwarty filozof */
  80. if(Filozof_nr==3)
  81. {
  82. sem_wait(&prt);
  83. porcja_nr=j+1;
  84. printf("Jestem filozof 4 i mysle po raz %d\n",porcja_nr);
  85. sem_post(&prt);
  86. sem_wait(&widelec_5);
  87. sem_wait(&widelec_4);
  88. sem_wait(&prt);
  89. porcja_nr=j+1;
  90. printf("Jestem filozof 4 i jem po raz %d.\n",porcja_nr);
  91. sem_post(&prt);
  92. sem_post(&widelec_4);
  93. sem_post(&widelec_5);
  94. }
  95.  
  96. /* piaty filozof */
  97. if(Filozof_nr==4)
  98. {
  99. sem_wait(&prt);
  100. porcja_nr=j+1;
  101. printf("Jestem filozof 5 i mysle po raz %d\n",porcja_nr);
  102. sem_post(&prt);
  103. sem_wait(&widelec_5);
  104. sem_wait(&widelec_1);
  105. sem_wait(&prt);
  106. porcja_nr=j+1;
  107. printf("Jestem filozof 5 i jem po raz %d.\n",porcja_nr);
  108. sem_post(&prt);
  109. sem_post(&widelec_1);
  110. sem_post(&widelec_5);
  111. }
  112. }
  113. return NULL;
  114. }
  115.  
  116. int main(int argc, char **argv)
  117. {
  118. int i;
  119. pthread_t watek[5];
  120. sem_init (&widelec_1, 0, 1);
  121. sem_init (&widelec_2, 0, 1);
  122. sem_init (&widelec_3, 0, 1);
  123. sem_init (&widelec_4, 0, 1);
  124. sem_init (&widelec_5, 0, 1);
  125. sem_init (&prt, 0, 1);
  126. int watek_nr [5];
  127. /* tworzenie watkow */
  128. for (i = 0; i < 5; i++)
  129. {
  130. watek_nr [i] = i;
  131. pthread_create (&watek [i], NULL, Jedzenie, (void *) &watek_nr [i]);
  132. }
  133.  
  134. for (i = 0; i < 10; i++)
  135. {
  136. pthread_join (watek [i], NULL);
  137. }
  138. /* niszczenie semaphorow */
  139. sem_destroy (&widelec_1);
  140. sem_destroy (&widelec_2);
  141. sem_destroy (&widelec_3);
  142. sem_destroy (&widelec_4);
  143. sem_destroy (&widelec_5);
  144. exit (0);
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement