Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. mtype = {packet,reply};
  2. init{
  3. chan ch1send =[0] of {int,int,mtype,int};
  4. chan ch2send = [0] of {int,int,mtype,int};
  5. chan ch1recv = [0] of {int,int,mtype,int};
  6. chan ch2recv=[0] of {int,int,mtype,int};
  7.  
  8. run Sender(1,1,ch1send);
  9. run Sender (2,2,ch2send);
  10. run Net (ch1send,ch2send,ch1recv,ch2recv);
  11. run Receiver(ch1recv);
  12. run Receiver(ch2recv);
  13. }
  14.  
  15. proctype Sender (int sender; int receiver; chan ch){
  16. int count=0;
  17. int confirm;
  18. mtype porr;
  19. do
  20. ::(count<10) ->
  21. porr=packet;
  22. ch!sender,receiver,porr,count
  23. if
  24. ::timeout -> ch!sender,receiver,porr,count
  25. ::ch?sender,receiver,porr,confirm; count=confirm;
  26. fi
  27. ::else-> break
  28. od
  29. }
  30.  
  31. proctype Net (chan ch1send; chan ch2send; chan ch1recv; chan ch2recv){
  32. int sender;
  33. int receiver;
  34. int data;
  35. int who;
  36. chan out;
  37. int count1;
  38. int count2;
  39. mtype porr;
  40.  
  41. if
  42. ::who=1
  43. ::who=2
  44. fi
  45. do
  46. ::if
  47. ::(who==1 && count1<10) ->
  48. if
  49. ::ch1send?sender,receiver,porr,data;out=ch1recv;who=1
  50. ::ch1recv?sender,receiver,porr,data;out=ch1send; count1=data
  51. fi
  52. ::(who==2 && count2<10) ->
  53. if
  54. ::ch2send?sender,receiver,porr,data;out=ch2recv;who=2
  55. ::ch2recv?sender,receiver,porr,data; out= ch2send; count2=data
  56. fi
  57. fi;
  58.  
  59. if
  60. ::(count1==10 && who!=2)-> who=2;
  61. ::(count2==10 && who!=1)-> who=1;
  62. ::else->skip
  63. fi
  64.  
  65. if
  66. ::(porr==packet)->
  67. if
  68. ::out!sender,receiver,porr,data
  69. ::out!sender,receiver,porr,data
  70. ::(data!=9)->skip
  71. fi
  72. ::(porr==reply)->
  73. if
  74. ::out!sender,receiver,porr,data
  75. ::out!sender,receiver,porr,data
  76. ::(data!=10)->skip
  77. fi
  78. fi;
  79.  
  80. if
  81. ::(count1==10 && count2==10)->break
  82. ::else->skip
  83. fi
  84.  
  85. od
  86. }
  87.  
  88. proctype Receiver (chan ch){
  89. int sender;
  90. int receiver;
  91. int data=0;
  92. mtype porr;
  93.  
  94. do
  95. ::(data<10)->
  96. ch?sender,receiver,porr,data
  97. porr=reply;
  98. data=data+1
  99. ch!sender,receiver,porr,data
  100. ::else->break
  101. od
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement