Guest User

Untitled

a guest
Oct 28th, 2014
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include<pthread.h>
  4.  
  5. #define W 2 // kazdy klient 2 piwa
  6. #define N 3 //ilosc kufli
  7. #define K 3 //ilosc klientow
  8.  
  9. #define CZAS_NALEWANIA 3
  10. #define CZAS_PICIA 5
  11.  
  12. typedef struct Pub
  13. {
  14. int ilKufli;
  15. pthread_t klienci[K];
  16. } Pub;
  17.  
  18. pthread_mutex_t kufleMutex = PTHREAD_MUTEX_INITIALIZER;
  19. pthread_mutex_t barmanMutex = PTHREAD_MUTEX_INITIALIZER;
  20. void * wejdzIPij (void * nr);
  21. void napelnijKufel();
  22. Pub pub;
  23.  
  24.  
  25. main()
  26. {
  27. pub.ilKufli=N;
  28.  
  29. int i;
  30. int numeryKlientow[K];
  31.  
  32. for(i=0 ; i<K ; ++i)
  33. {
  34. numeryKlientow[i] = i+1;
  35. pthread_create(&pub.klienci[i], NULL, wejdzIPij, (void*)&numeryKlientow[i]);
  36. }
  37.  
  38. for(i=0; i<K; i++){
  39. pthread_join(pub.klienci[i], NULL);
  40. }
  41.  
  42. return 0;
  43. }
  44.  
  45. void napelnijKufel(){
  46. pthread_mutex_lock(&barmanMutex);
  47. while(pub.ilKufli==0) {};
  48. int tmp = --pub.ilKufli;
  49. sleep(CZAS_NALEWANIA);
  50. printf("BARMAN napelnij kufel!");
  51. pthread_mutex_unlock(&barmanMutex);
  52. }
  53.  
  54.  
  55.  
  56. void* wejdzIPij (void* nrKlienta)
  57. {
  58. int nr = *(int*) nrKlienta;
  59. printf("Witamy klienta nr %d\n", nr);
  60.  
  61. int i, tmp;
  62. for(i = 0 ; i < W ; ++i)
  63. {
  64. napelnijKufel();
  65. printf("KLIENT %d\tpije %d piwo\n", nr, i+1);
  66. sleep(CZAS_PICIA);
  67. pthread_mutex_lock(&kufleMutex);
  68. // tmp = ++pub.ilKufli;
  69. printf("KLIENT %d wypil %d kufel.", nr, i+1);
  70. pthread_mutex_unlock(&kufleMutex);
  71. }
  72. printf("Pub opuszcza klient nr %d\n", nr);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment