Advertisement
Lauda

Untitled

Apr 10th, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. /*
  2.     Definisati klasu parking koja modeluje parking prostor kapaciteta jednog mesta.
  3.     Ova klasa ima operacije:
  4.         void parking::udji();
  5.         void parking::izadji();
  6.  
  7.     Automobili koji dolaze na parking su predstavljeni nitima.
  8.                 Za ulazak na parking, automobil poziva metodu udji().
  9.                 Za izlazak sa parkinga, automobil poziva metodu izadji().
  10.                 Automobil se na parkingu zadrzava 3 sekunde.
  11.     Pri ulasku, ukoliko je parking zauzet, automobil mora da saceka da se parking oslobodi.
  12. */
  13.  
  14. #include <iostream>
  15. #include <thread>
  16.  
  17. using namespace std;
  18.  
  19. class parking {
  20.     enum State { SLOBODAN, ZAUZET };
  21.     State s;
  22.     mutex m;
  23.     condition_variable free;
  24.  
  25.     public:
  26.     parking() : s(SLOBODAN) {};
  27.  
  28.         void udji() {
  29.                 unique_lock<mutex> l(m);
  30.                 while (s == ZAUZET) {
  31.                     free.wait(l);
  32.                 }
  33.                 s = ZAUZET;
  34.             }
  35.         void izadji() {
  36.             lock_guard<mutex> l(m);
  37.             s = SLOBODAN;
  38.             free.notify_one();
  39.         }
  40. };
  41.  
  42. mutex term_mx;
  43. void automobil(parking& p) {
  44.    p.udji();
  45.    { lock_guard<mutex> l(term_mx);
  46.       cout << "Automobil " << this_thread::get_id() << " usao na parking." << endl;
  47.    }
  48.    this_thread::sleep_for(chrono::seconds(3));
  49.    p.izadji();
  50.    { lock_guard<mutex> l(term_mx);
  51.       cout << "Automobil " << this_thread::get_id() << " izasao sa parkinga." << endl;
  52.    }
  53. }
  54.  
  55. const int automobila = 10;
  56.  
  57. int main() {
  58.     parking p;
  59.     thread t[automobila];
  60.  
  61.     for (int i=0; i<automobila; i++)
  62.         t[i] = thread(automobil, ref(p));
  63.  
  64.     for (int i=0; i<automobila; i++)
  65.         t[i].join();
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement