//------------------------------------------------------------------------------ /** @file "Pthreads/C++/Primer 1 - thread/NitY.h" @brief Klasa korisnicke niti izvedena iz klase Thread. */ //------------------------------------------------------------------------------ #ifndef _NitY_h_ #define _NitY_h_ //------------------------------------------------------------------------------ #include "ThreadCpp.h" #include #include "SemaphoreCpp.h" //------------------------------------------------------------------------------ using namespace std; //------------------------------------------------------------------------------ /** @brief Klasa NitY. Klasa korisnicke niti izvedena iz klase Thread. */ class NitY : public ThreadCpp { public: /** @brief Konstruktor klase. @param s1 Prvi semafor. @param s2 Drugi semafor. @param x Pokazivac ka prvom deljenom podatku. @param y Pokazivac ka drugom deljenom podatku. @param z Pokazivac ka trecem deljenom podatku. Alocira i inicijalizuje novi objekat tipa NitY. */ NitY(SemaphoreCpp* s1, SemaphoreCpp* s2, int* x, int* y, int* z) { this->s1 = s1; this->s2 = s2; this->x = x; this->y = y; this->z = z; } protected: /** @brief Posao koji nit treba da odradi. Proverava vrednosti deljenih podataka sve dok uslov ne postane. zadovoljen. */ virtual void run() { int kraj = 0; while(!kraj) { s1->wait(); *z = *x + *y; if (*x == 10) kraj = 1; s2->signal(); } cout << "NitY finnished" << endl; } /** @property x @brief Pokazivac ka prvom deljenom podatku. */ /** @property y @brief Pokazivac ka drugom deljenom podatku. */ /** @property z @brief Pokazivac ka trecem deljenom podatku. */ int* x, *y, *z; /** @property s1 @brief Prvi semafor. */ /** @property s2 @brief Drugi semafor. */ SemaphoreCpp* s1, *s2; }; //------------------------------------------------------------------------------ #endif //------------------------------------------------------------------------------