Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. int gere(){
  2.  
  3. if(fila_espera_chegada->next == NULL && fila_espera_partida->next == NULL){
  4. return 0;
  5. }
  6. else if(fila_espera_chegada->next != NULL && fila_espera_partida->next == NULL){
  7. if(fila_espera_chegada->next->eta <= hora_ut()){
  8. return 1;
  9. }
  10. else{
  11. return 0;
  12. }
  13. }
  14. else if(fila_espera_chegada->next == NULL && fila_espera_partida->next != NULL){
  15. if(fila_espera_partida->next->descolagem <= hora_ut()){
  16. return 2;
  17. }
  18. else{
  19. return 0;
  20. }
  21. }
  22. else if(fila_espera_chegada->next != NULL && fila_espera_partida->next != NULL){
  23. if(fila_espera_partida->next->descolagem <= hora_ut() && fila_espera_chegada->next->eta > hora_ut()){
  24. return 1;
  25. }
  26. else if(fila_espera_partida->next->descolagem > hora_ut() && fila_espera_chegada->next->eta <= hora_ut()){
  27. return 2;
  28. }
  29. else if(fila_espera_partida->next->descolagem > hora_ut() && fila_espera_chegada->next->eta > hora_ut())
  30. return 0;
  31. }
  32. else if(fila_espera_partida->next->descolagem <= hora_ut() && fila_espera_chegada->next->eta <= hora_ut()){
  33. if(fila_espera_partida->next->descolagem < fila_espera_chegada->next->eta){
  34. return 2;
  35. }
  36. else if(fila_espera_partida->next->descolagem >= fila_espera_chegada->next->eta ){
  37. return 1;
  38. }
  39. }
  40. }
  41.  
  42. void *thread_gerir(){
  43. int a,num;
  44.  
  45. while(1){
  46. pthread_mutex_lock(&mutex_torre);
  47. while((a = gere()) == 0){
  48. if(fila_espera_chegada->next == NULL && fila_espera_partida->next == NULL){
  49. pthread_cond_wait(&cond_torre,&mutex_torre);
  50. }
  51. else if(fila_espera_chegada->next != NULL && fila_espera_partida->next == NULL){
  52. clock_gettime(CLOCK_REALTIME, &ts);
  53. double var;
  54. var = calcula_init(fila_espera_chegada->next->eta);
  55. ts.tv_sec += var;
  56. pthread_cond_timedwait(&cond_torre,&mutex_torre,&ts);
  57. }
  58. else if(fila_espera_chegada->next == NULL && fila_espera_partida->next != NULL){
  59. clock_gettime(CLOCK_REALTIME, &ts);
  60. double var;
  61. var = calcula_init(fila_espera_partida->next->descolagem);
  62. ts.tv_sec += var;
  63. pthread_cond_timedwait(&cond_torre,&mutex_torre,&ts);
  64. }
  65. else if(fila_espera_chegada->next != NULL && fila_espera_partida->next != NULL){
  66. clock_gettime(CLOCK_REALTIME, &ts);
  67. double var;
  68. var = calcula_init(fila_espera_partida->next->descolagem);
  69. ts.tv_sec += var;
  70. num = 3;
  71. pthread_cond_timedwait(&cond_torre,&mutex_torre,&ts);
  72. }
  73. }
  74. sem_wait(shared_sem);
  75. if(a == 1){
  76. int i,j;
  77. i = 0;
  78. j= 0;
  79. while (strcmp(shm_chegada[i].arr.nome,fila_espera_chegada->next->arr.nome)!= 0){
  80. i++;
  81. }
  82. shm_chegada[i].arr.var = 1;
  83. remove_lista_chegada(fila_espera_chegada,fila_espera_chegada->next->arr.nome);
  84. if(fila_espera_chegada->next != NULL){
  85. while (strcmp(shm_chegada[j].arr.nome,fila_espera_chegada->next->arr.nome)!= 0){
  86. j++;
  87. }
  88. shm_chegada[j].arr.var = 1;
  89. sleep(calcula_init(fila_espera_chegada->next->eta));
  90. remove_lista_chegada(fila_espera_chegada,fila_espera_chegada->next->arr.nome);
  91. pthread_mutex_unlock(&mutex_torre);
  92. sem_post(shared_sem);
  93. pthread_cond_broadcast(&shared_mutex->cond);
  94. }
  95. else{
  96. pthread_mutex_unlock(&mutex_torre);
  97. sem_post(shared_sem);
  98. pthread_cond_broadcast(&shared_mutex->cond);
  99. }
  100. //manda sinal para as threads;
  101. }
  102. if(a == 2){
  103. int i,j;
  104. i = 0;
  105. j= 0;
  106. while (strcmp(shm_partida[i].dep.nome,fila_espera_partida->next->dep.nome)!= 0){
  107. i++;
  108. }
  109. shm_partida[i].dep.var = 1;
  110. remove_lista_partida(fila_espera_partida,fila_espera_partida->next->dep.nome);
  111. printf("Removeu primeiro\n");
  112. if(fila_espera_partida->next != NULL){
  113. while (strcmp(shm_partida[j].dep.nome,fila_espera_partida->next->dep.nome)!= 0){
  114. j++;
  115. }
  116. shm_partida[j].dep.var = 1;
  117. sleep(calcula_init(fila_espera_partida->next->descolagem));
  118. remove_lista_partida(fila_espera_partida,fila_espera_partida->next->dep.nome);
  119. pthread_mutex_unlock(&mutex_torre);
  120. sem_post(shared_sem);
  121. printf("Vai mandar broadcast 2 \n");
  122. pthread_cond_broadcast(&shared_mutex->cond);
  123. }
  124. else{
  125. pthread_mutex_unlock(&mutex_torre);
  126. sem_post(shared_sem);
  127. printf("Vai mandar broadcast 1\n");
  128. pthread_cond_broadcast(&shared_mutex->cond);
  129. }
  130. }
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement