Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include <time.h>
  4. #include<pthread.h>
  5.  
  6.  
  7. void * watek_klient (void * arg);
  8.  
  9. pthread_mutex_t muteks1;
  10. pthread_mutex_t muteks2;
  11. pthread_mutex_t muteks3;
  12.  
  13. int wolne_kufle;
  14.  
  15. main(){
  16.  
  17. pthread_t *tab_klient;
  18. int *tab_klient_id;
  19.  
  20. int l_kl, l_kf, l_kr, i;
  21.  
  22. printf("\nLiczba klientow: "); scanf("%d", &l_kl);
  23.  
  24. printf("\nLiczba kufli: "); scanf("%d", &l_kf);
  25.  
  26. wolne_kufle = l_kf;
  27.  
  28. //printf("\nLiczba kranow: "); scanf("%d", &l_kr);
  29. l_kr = 1;
  30.  
  31. tab_klient = (pthread_t *) malloc(l_kl*sizeof(pthread_t));
  32. tab_klient_id = (int *) malloc(l_kl*sizeof(int));
  33. for(i=0;i<l_kl;i++) tab_klient_id[i]=i;
  34.  
  35. printf("\nOtwieramy pub (simple)!\n");
  36. printf("\nLiczba wolnych kufli %d\n", l_kf);
  37.  
  38. for(i=0;i<l_kl;i++){
  39. pthread_create(&tab_klient[i], NULL, watek_klient, &tab_klient_id[i]);
  40. }
  41. for(i=0;i<l_kl;i++){
  42. pthread_join( tab_klient[i], NULL);
  43. }
  44. printf("\nZamykamy pub!\n");
  45.  
  46. }
  47.  
  48.  
  49. void * watek_klient (void * arg_wsk){
  50.  
  51. int moj_id = * ((int *)arg_wsk);
  52.  
  53. int i, j, kufel, result;
  54. int ile_musze_wypic = 2;
  55.  
  56. printf("\nKlient %d, wchodzę do pubu\n", moj_id);
  57.  
  58. for(i=0; i<ile_musze_wypic; i++){
  59.  
  60.  
  61. int czeka=0;
  62.  
  63. do{
  64. pthread_mutex_lock(&muteks1);
  65. if(wolne_kufle>0){
  66. printf("\nKlient %d, wybieram kufel\n", moj_id);
  67. wolne_kufle -= 1;
  68. printf("\nZostało %d, wolnych kufli\n", wolne_kufle);
  69. pthread_mutex_unlock(&muteks1);
  70. break;
  71.  
  72. }
  73. else{
  74. pthread_mutex_unlock(&muteks1);
  75. if (czeka!=1) printf("\nKilent %d czeka...\n", moj_id);
  76. czeka = 1;
  77. usleep(300);
  78. }
  79. }while(1);
  80.  
  81.  
  82. pthread_mutex_lock(&muteks2);
  83. j=0;
  84. printf("\nKlient %d, nalewam z kranu %d\n", moj_id, j);
  85. usleep(300);
  86. pthread_mutex_unlock(&muteks2);
  87.  
  88.  
  89. pthread_mutex_lock(&muteks3);
  90. printf("\nKlient %d, pije\n", moj_id);
  91. nanosleep((struct timespec[]){{0, 500000000L}}, NULL);
  92. printf("\nKlient %d, odkladam kufel\n", moj_id);
  93. wolne_kufle += 1;
  94. pthread_mutex_unlock(&muteks3);
  95.  
  96. }
  97.  
  98. printf("\nKlient %d, wychodzę z pubu\n", moj_id);
  99.  
  100. return(NULL);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement