Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <thread>
- #include <unistd.h>
- #include "Student.h"
- #include "Glass.h"
- #include <ncurses.h>
- #include <mutex>
- using namespace std;
- int amountOfThreads=5;
- mutex mutx, mt;
- bool endProg = false;
- void simulatingLife(Student student)
- {
- while(!endProg)
- {
- if(getch()=='q')
- {
- endProg=true;
- break;
- }
- student.sobering();
- mt.lock();
- if(student.getPriority()>2)
- {
- mutx.lock();
- student.setPriorityFlag(true);
- }
- mt.unlock();
- student.takeFork(&mutx);
- student.drinking();
- }
- }
- int main(int argc, char **argv)
- {
- srand(time(NULL));
- thread *t = new thread[amountOfThreads];
- Student *students = new Student[amountOfThreads];
- Glass *glasses = new Glass[amountOfThreads];
- initscr();
- nodelay(stdscr,TRUE);
- start_color();
- for(int i=0; i<amountOfThreads;i++)
- {
- Student student(i);
- students[i] = student;
- Glass fork(i);
- glasses[i] = fork;
- students[i].setLeftGlass(&glasses[i]);
- if(i>0)
- {
- students[i].setRightGlass(&glasses[i-1]);
- }
- if(i==amountOfThreads-1)
- {
- students[0].setRightGlass(&glasses[amountOfThreads-1]);
- }
- mvprintw(2+i*2,0,"%s: %d","Thread", i);
- }
- mvprintw(0,14,"%s %s %s", "Glass Actual state"," Drinking counter", " Sobering counter");
- refresh();
- for(int i=0 ;i<amountOfThreads;i++) t[i] = thread(simulatingLife,students[i]);
- for(int i=0; i<amountOfThreads;i++)
- {
- t[i].join();
- }
- endwin();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement