Little_hobbit

model 2 первоначальная

May 7th, 2021 (edited)
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. #define N 5 // Количество процессов
  2.  
  3. /* N каналов для общения координатора с каждым процессом
  4. * Можно было бы и сделать 1 канал, просто передавая как второй параметр
  5. * номер процесса-получателя
  6. */
  7. mtype = { OK, FINISH };
  8. chan status[N] = [0] of { mtype };
  9.  
  10. // Очередь (FIFO) запросов на вход, содержит номер процесса
  11. chan enter = [N] of { int };
  12.  
  13. active [N] proctype P()
  14. {
  15. do
  16. ::
  17. skip;
  18. entry:
  19. enter!_pid; // Готовность зайти в критическуб зону
  20. status[_pid]?OK -> // Вход в крит. зону
  21.  
  22. // Критическая зона
  23. crit:
  24. skip;
  25.  
  26. exit:
  27. // Освобождение критической зоны
  28. status[_pid]!FINISH;
  29.  
  30. // Цикл может прерваться
  31. if
  32. :: skip
  33. :: break
  34. fi
  35. od
  36. }
  37.  
  38. active proctype coordinator()
  39. {
  40. int procN;
  41. do
  42. ::
  43. enter?procN; // Получаем номер процесса, идущ. в КС
  44. // Разрешаем процессу зайти в КС и ждем его завершения
  45. status[procN]!OK -> status[procN]?FINISH;
  46. od;
  47. }
  48.  
Advertisement
Add Comment
Please, Sign In to add comment