Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <unistd.h>
  4. #include "Student.h"
  5. #include "Glass.h"
  6. #include <ncurses.h>
  7. #include <mutex>
  8.  
  9. using namespace std;
  10.  
  11. int amountOfThreads=5;
  12. mutex mutx, mt;
  13. bool endProg = false;
  14.  
  15. void simulatingLife(Student student)
  16. {
  17. while(!endProg)
  18. {
  19. if(getch()=='q')
  20. {
  21. endProg=true;
  22. break;
  23. }
  24. student.sobering();
  25. mt.lock();
  26. if(student.getPriority()>2)
  27. {
  28. mutx.lock();
  29. student.setPriorityFlag(true);
  30. }
  31. mt.unlock();
  32. student.takeFork(&mutx);
  33. student.drinking();
  34. }
  35. }
  36.  
  37. int main(int argc, char **argv)
  38. {
  39. srand(time(NULL));
  40. thread *t = new thread[amountOfThreads];
  41. Student *students = new Student[amountOfThreads];
  42. Glass *glasses = new Glass[amountOfThreads];
  43. initscr();
  44. nodelay(stdscr,TRUE);
  45. start_color();
  46.  
  47. for(int i=0; i<amountOfThreads;i++)
  48. {
  49. Student student(i);
  50. students[i] = student;
  51.  
  52. Glass fork(i);
  53. glasses[i] = fork;
  54.  
  55. students[i].setLeftGlass(&glasses[i]);
  56. if(i>0)
  57. {
  58. students[i].setRightGlass(&glasses[i-1]);
  59. }
  60. if(i==amountOfThreads-1)
  61. {
  62. students[0].setRightGlass(&glasses[amountOfThreads-1]);
  63. }
  64.  
  65. mvprintw(2+i*2,0,"%s: %d","Thread", i);
  66. }
  67. mvprintw(0,14,"%s %s %s", "Glass Actual state"," Drinking counter", " Sobering counter");
  68. refresh();
  69.  
  70. for(int i=0 ;i<amountOfThreads;i++) t[i] = thread(simulatingLife,students[i]);
  71.  
  72. for(int i=0; i<amountOfThreads;i++)
  73. {
  74. t[i].join();
  75. }
  76. endwin();
  77.  
  78. return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement