Advertisement
Guest User

Untitled

a guest
May 20th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.02 KB | None | 0 0
  1. from multiprocessing import Process, Queue, Lock
  2. import time
  3.  
  4.  
  5. def kanibal(red, mojIndex, sljedeciIndex, znacka):
  6. presao = False
  7. while (True):
  8. time.sleep(1)
  9. id, znacka = red.get(block=True)
  10. if (id != mojIndex):
  11. red.put((id, znacka))
  12. else:
  13. if(presao==False):
  14. brojMisionara = brojiZnak('m', znacka)
  15. brojKanibala = brojiZnak('k', znacka)
  16. print ("K kanibali " + str(brojKanibala))
  17. print ("K misionari " + str(brojMisionara))
  18.  
  19. if(brojKanibala< brojMisionara or brojMisionara==0):
  20. print("PrijeK " + str(znacka))
  21. for i in range(0, 3):
  22.  
  23.  
  24. if (znacka[i] == '-'):
  25. znacka[i] = 'k'
  26. presao = True
  27. break
  28.  
  29. print("Poslije K" + str(znacka))
  30.  
  31. red.put((sljedeciIndex, znacka))
  32. print("Proces " + str(mojIndex) + " Sadrzaj poruke: " + str(znacka))
  33. #time.sleep(1)
  34.  
  35.  
  36. def brojiZnak(znak,znacka):
  37. br = 0
  38. for i in range(0, 3):
  39. if(znacka[i] == znak):
  40. br = br+1
  41. return br
  42.  
  43. def misionar(red, mojIndex, sljedeciIndex, znacka):
  44. presao = False
  45. while(True) :
  46. time.sleep(1)
  47. id, znacka = red.get(block=True)
  48.  
  49. if (id != mojIndex) :
  50. red.put((id, znacka))
  51. else:
  52. if(presao==False):
  53.  
  54. brojMisionara = brojiZnak('m', znacka)
  55. brojKanibala = brojiZnak('k', znacka)
  56. print ("M kanibali " + str(brojKanibala))
  57. print ("M misionari " + str(brojMisionara))
  58.  
  59. print(str(znacka))
  60. if(brojKanibala <= brojMisionara or brojKanibala==1):
  61. #1 ako je camac prazan
  62. #presao = False
  63. print("prije" + str(znacka))
  64.  
  65. for i in range(0, 3):
  66. if(znacka[i] == '-'):
  67. znacka[i] = 'm'
  68. presao = True
  69. break
  70. print("Poslije" + str(znacka))
  71.  
  72. red.put((sljedeciIndex, znacka))
  73. print("Proces " + str(mojIndex) + " Sadrzaj poruke: " + str(znacka))
  74. #time.sleep(1)
  75.  
  76.  
  77. def camac(red, mojIndex, sljedeciIndex, znacka):
  78. red.put((sljedeciIndex, znacka))
  79. while(True):
  80.  
  81. #time.sleep(1)
  82. brojBudenja = 20 # 20*200 = 4 sec, spavam 200 ms
  83. while(brojBudenja>0):
  84. brojBudenja = brojBudenja-1
  85. id, znacka = red.get(block=True)
  86. if (id != mojIndex):
  87. red.put((id, znacka))
  88. continue
  89. red.put((sljedeciIndex, znacka))
  90. time.sleep(0.2)
  91.  
  92. id, znacka = red.get(block=True)
  93. if (id != mojIndex):
  94. red.put((id, znacka))
  95. continue
  96.  
  97. brojPutnika = 3 - znacka.count('-')
  98.  
  99. if(brojPutnika>=1):
  100. print ('Camac prevozi ' + str(brojPutnika) + ' putnika.')
  101. print ("Prevezeni: " + str(znacka))
  102. #znacka = ['-', '-', '-']
  103.  
  104. znacka[0] = '-'
  105. znacka[1] = '-'
  106. znacka[2] = '-'
  107. continue
  108.  
  109. time.sleep(4)
  110. print ("budan")
  111. brojPutnika = 3 - znacka.count('-')
  112. if(brojPutnika == 0):
  113. break;
  114.  
  115.  
  116. N = 4 #kanibali
  117. M = 4 #misionari
  118.  
  119.  
  120. if __name__ == '__main__':
  121. index = 0
  122. redPoruka = Queue()
  123. znacka = ['-', '-', '-']
  124.  
  125. for i in range(N):
  126. p = Process(target=kanibal, args=(redPoruka, index, index+1, znacka))
  127. index = index + 1
  128. p.start()
  129.  
  130. for i in range(M):
  131. p = Process(target=misionar, args=(redPoruka, index, index+1, znacka))
  132. index = index + 1
  133. p.start() #pokrece gore stvoreni proces
  134.  
  135. p = Process(target=camac, args=(redPoruka, index, 0, znacka))
  136. p.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement